Ошибка нехватки памяти при объединении пяти больших кадров данных

У меня выходит ошибка памяти, когда я присоединяюсь к пяти большим кадрам данных.

TaskSetManager: потеряна задача 12.0 на этапе 10.0 (TID 186, wn20-sal04s.sentience.local, исполнитель 4): java.lang.OutOfMemoryError: пространство кучи Java в org.apache.spark.sql.catalyst.expressions.UnsafeRow.copy( UnsafeRow.java:504)

Мои кадры данных: A, B, C, D, E, где они соединены с использованием столбца ID. Выполняется полное внешнее соединение. Ниже приведены их размеры:

A--> 20GB

B--> 20GB

C--> 10 GB

D --> 10GB

E --> 10GB

A.join(B, Seq("ID"), "outer")
  .join(C, Seq("ID"), "outer")
  .join(D, Seq("ID"), "outer")
  .join(E, Seq("ID"), "outer")

Ниже приведена моя команда отправки искры:

spark-submit --master yarn --driver-memory 16g --executor-memory 16g --conf spark.yarn.executor.memoryOverhead=8g --conf spark.yarn.driver.memoryOverhead=8g --conf spark.default. parallelism=60 --conf spark.sql.shuffle.partitions=60 --num-executors 17 --executor-cores 6 --class x x.jar

Не могли бы вы посоветовать, как добиться такого соединения фреймов данных с помощью spark 2.1 (scala)?


person Geeta Singh    schedule 20.09.2017    source источник
comment
Вы можете посмотреть ответ здесь: stackoverflow.com/a/37849488/7579547   -  person Shaido    schedule 20.09.2017
comment
spark.sql.shuffle.partitions=60 слишком мало (по умолчанию 200), попробуйте 1000 или около того   -  person Raphael Roth    schedule 20.09.2017