Você está tentando carregar na RAM muitos dados . Você deve primeiro reduzir a quantidade de dados que o SQL recupera antes de atingir o Spark e otimize-o usando parâmetros Spark, por exemplo, partições .
Considere uma ou mais destas otimizações:
- Especifique em
SELECTquais colunas visualizar explicitamente, apenas as que você precisa, se possível; - (consulta bruta) Loop em um
whileciclo até que você possafetchlinhas fazendo um loop em cada linha. As técnicas a seguir podem funcionar definindo uma constanten_rowspara ler na memória e atualizariindexe cada ciclismo:
LIMIT i,i+n_rows BETWEEN i AND i+n_rows WHILE primaryKey >= i AND primaryKey < i+n_rows - Usando partições . Use
partitionColumn,lowerBound,upperBoundenumPartitions(Referência 1) e (Referência 2) :
partitionColumn selecione a coluna que será usada para determinar como dividir os dados (por exemplo, a chave primária ). lowerBound estabelece o valor mínimo de partitionColumn que será buscado. upperBound estabelece o valor máximo de partitionColumn que será buscado. numPartitions significa quantas conexões paralelas você deseja definir para leitura de dados por meio de RDBMS. Portanto, o Spark recuperará seus conjuntos de dados usando linhas que você obteria se estivesse fazendo
SELECT * FROM table WHERE partitionColumn BETWEEN lowerBound AND upperBound .