U probeert te veel gegevens in het RAM te laden . U moet eerst de hoeveelheid gegevens verminderen die SQL u ophaalt voordat deze Spark bereikt en optimaliseer het met behulp van spark-parameters, bijvoorbeeld partities .
Overweeg een of meer van deze optimalisaties:
- Geef op in
SELECT
welke kolommen u expliciet wilt bekijken, indien mogelijk alleen de kolommen die u nodig heeft; - (Onbewerkte zoekopdracht) Loop in een
while
cyclus totdat je kuntfetch
rijen door elke rij te herhalen. De volgende technieken kunnen werken door een constanten_rows
in te stellen om in het geheugen te lezen eni
bij te werken indexeer elke fietstocht:
LIMIT i,i+n_rows
BETWEEN i AND i+n_rows
WHILE primaryKey >= i AND primaryKey < i+n_rows
- Gebruik partities . Gebruik
partitionColumn
,lowerBound
,upperBound
ennumPartitions
(Referentie 1) en (Referentie 2) :
partitionColumn
selecteer de kolom die wordt gebruikt om te bepalen hoe de gegevens moeten worden gesplitst (bijvoorbeeld de primaire sleutel ).
lowerBound
bepaalt de minimumwaarde van partitionColumn
dat wordt opgehaald.
upperBound
stelt de maximale waarde in van partitionColumn
dat wordt opgehaald.
numPartitions
betekent hoeveel parallelle verbindingen u wilt instellen voor het lezen van gegevens via RDBMS.
Dus Spark haalt je datasets op met behulp van rijen die je zou krijgen als je SELECT * FROM table WHERE partitionColumn BETWEEN lowerBound AND upperBound
zou doen .