Опитвате се да заредите в RAM твърде много данни . Първо трябва да намалите количеството данни, които SQL ви извлича, преди да достигнат Spark и го оптимизирайте с помощта на параметри на Spark, например раздели .
Помислете за една или повече от тези оптимизации:
- Посочете в
SELECT
какви колони да видите изрично, само тези, от които се нуждаете, ако е възможно; - (Необработена заявка) Цикъл в
while
цикъл, докато можете даfetch
редове, като завъртите всеки ред. Следните техники могат да работят чрез задаване на константаn_rows
за четене в паметта и актуализиране наi
индексирайте всяко колоездене:
LIMIT i,i+n_rows
BETWEEN i AND i+n_rows
WHILE primaryKey >= i AND primaryKey < i+n_rows
- Използване на раздели . Използвайте
partitionColumn
,lowerBound
,upperBound
иnumPartitions
(Справка 1) и (Справка 2) :
partitionColumn
изберете колоната, която ще се използва, за да се определи как да се разделят данните (например първичният ключ ).
lowerBound
установява минималната стойност на partitionColumn
който ще бъде извлечен.
upperBound
установява максималната стойност на partitionColumn
който ще бъде извлечен.
numPartitions
означава колко паралелни връзки искате да зададете за четене на данни през RDBMS.
Така Spark ще ви извлече набори от данни, използвайки редове, които бихте получили, ако правихте SELECT * FROM table WHERE partitionColumn BETWEEN lowerBound AND upperBound
.