Pokoušíte se načíst do paměti RAM příliš mnoho dat . Nejprve byste měli snížit množství dat, které vám SQL načte, než dosáhne Spark a optimalizovat jej pomocí parametrů jiskry, například oddílů .
Zvažte jednu nebo více z těchto optimalizací:
- Uveďte v
SELECT
jaké sloupce explicitně zobrazit, pokud možno pouze ty, které potřebujete; - (Nezpracovaný dotaz) Smyčka v
while
cyklujte, dokud nebudete mocifetch
řádky smyčkováním každého řádku. Následující techniky by mohly fungovat nastavením konstantyn_rows
pro čtení v paměti a aktualizacii
index každé cyklování:
LIMIT i,i+n_rows
BETWEEN i AND i+n_rows
WHILE primaryKey >= i AND primaryKey < i+n_rows
- Použití oddílů . Použijte
partitionColumn
,lowerBound
,upperBound
anumPartitions
(Reference 1) a (Reference 2) :
partitionColumn
vyberte sloupec, který bude použit k určení způsobu rozdělení dat (například primární klíč ).
lowerBound
stanoví minimální hodnotu z partitionColumn
který bude načten.
upperBound
stanoví maximální hodnotu z partitionColumn
který bude načten.
numPartitions
znamená, kolik paralelních připojení chcete nastavit pro čtení dat prostřednictvím RDBMS.
Spark vám tedy načte datové sady pomocí řádků, které byste získali, kdybyste dělali SELECT * FROM table WHERE partitionColumn BETWEEN lowerBound AND upperBound
.