Опитвате се да заредите в 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 .