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
SELECT
hvilke kolonner der skal ses eksplicit, kun dem du har brug for, hvis det er muligt; - (Rå forespørgsel) Sløjfe i en
while
cyklus indtil du kanfetch
rækker ved at løkke hver række. Følgende teknikker kunne fungere ved at indstille en konstantn_rows
at læse i hukommelsen og opdaterei
indekser 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
,upperBound
ognumPartitions
(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
.