Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

java.lang.OutofMemorySpace:Java heap space ao buscar 120 milhões de linhas do banco de dados no pyspark


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ê possa fetch linhas fazendo um loop em cada linha. As técnicas a seguir podem funcionar definindo uma constante n_rows para ler na memória e atualizar i indexe cada ciclismo:

LIMIT i,i+n_rows

BETWEEN i AND i+n_rows

WHILE primaryKey >= i AND primaryKey < i+n_rows

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 .