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
SELECTjaké sloupce explicitně zobrazit, pokud možno pouze ty, které potřebujete; - (Nezpracovaný dotaz) Smyčka v
whilecyklujte, dokud nebudete mocifetchřádky smyčkováním každého řádku. Následující techniky by mohly fungovat nastavením konstantyn_rowspro čtení v paměti a aktualizaciiindex 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,upperBoundanumPartitions(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 .