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
SELECTqué columnas ver explícitamente, solo las que necesita, si es posible; - (Consulta sin procesar) Bucle en un
whileciclo hasta que puedasfetchfilas haciendo un bucle en cada fila. Las siguientes técnicas podrían funcionar estableciendo una constanten_rowspara leer en memoria y actualizariindexar cada ciclo:
LIMIT i,i+n_rows
BETWEEN i AND i+n_rows
WHILE primaryKey >= i AND primaryKey < i+n_rows
- Uso de particiones . Usar
partitionColumn,lowerBound,upperBoundynumPartitions(Referencia 1) y (Referencia 2) :
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 .