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
SELECT
quais colunas visualizar explicitamente, apenas as que você precisa, se possível; - (consulta bruta) Loop em um
while
ciclo até que você possafetch
linhas fazendo um loop em cada linha. As técnicas a seguir podem funcionar definindo uma constanten_rows
para ler na memória e atualizari
indexe 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
,upperBound
enumPartitions
(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
.