Du forsøger at indlæse RAM for meget data . Du bør først reducere mængden af data, som SQL henter dig, før den når Spark og optimer det ved hjælp af gnistparametre, for eksempel partitioner .
Overvej en eller flere af disse optimeringer:
- Angiv i
SELECThvilke kolonner der skal ses eksplicit, kun dem du har brug for, hvis det er muligt; - (Rå forespørgsel) Sløjfe i en
whilecyklus indtil du kanfetchrækker ved at løkke hver række. Følgende teknikker kunne fungere ved at indstille en konstantn_rowsat læse i hukommelsen og opdatereiindekser hver cykling:
LIMIT i,i+n_rows
BETWEEN i AND i+n_rows
WHILE primaryKey >= i AND primaryKey < i+n_rows
- Brug af partitioner . Brug
partitionColumn,lowerBound,upperBoundognumPartitions(Reference 1) og (Reference 2) :
partitionColumn vælg den kolonne, der skal bruges til at bestemme, hvordan dataene skal opdeles (f.eks. den primære nøgle ).
lowerBound etablerer minimumsværdien af partitionColumn som vil blive hentet.
upperBound etablerer maksimumværdien af partitionColumn som vil blive hentet.
numPartitions betyder, hvor mange parallelle forbindelser du vil indstille til at læse data gennem RDBMS.
Så Spark vil hente dine datasæt ved hjælp af rækker, som du ville få, hvis du lavede SELECT * FROM table WHERE partitionColumn BETWEEN lowerBound AND upperBound .