sql >> Base de Datos >  >> RDS >> Mysql

java.lang.OutofMemorySpace:espacio de almacenamiento dinámico de Java al obtener 120 millones de filas de la base de datos en pyspark

Está intentando cargar en RAM demasiados datos . Primero debe reducir la cantidad de datos que SQL recupera antes de que llegue a Spark y optimizarlo usando parámetros de chispa, por ejemplo particiones .

Considere una o más de estas optimizaciones:

  • Especifique en SELECT qué columnas ver explícitamente, solo las que necesita, si es posible;
  • (Consulta sin procesar) Bucle en un while ciclo hasta que puedas fetch filas haciendo un bucle en cada fila. Las siguientes técnicas podrían funcionar estableciendo una constante n_rows para leer en memoria y actualizar i indexar cada ciclo:

LIMIT i,i+n_rows

BETWEEN i AND i+n_rows

WHILE primaryKey >= i AND primaryKey < i+n_rows

partitionColumn seleccione la columna que se usará para determinar cómo dividir los datos (por ejemplo, la clave principal ).

lowerBound establece el valor mínimo de partitionColumn eso será obtenido.

upperBound establece el valor máximo de partitionColumn eso será obtenido.

numPartitions significa cuántas conexiones paralelas desea configurar para leer datos a través de RDBMS.

Entonces, Spark recuperará sus conjuntos de datos usando filas que obtendría si estuviera haciendo SELECT * FROM table WHERE partitionColumn BETWEEN lowerBound AND upperBound .