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 puedasfetch
filas haciendo un bucle en cada fila. Las siguientes técnicas podrían funcionar estableciendo una constanten_rows
para leer en memoria y actualizari
indexar 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
,upperBound
ynumPartitions
(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
.