java.lang.StackoverflowError при записи фрейма данных в Postgresql с использованием JDBC - PullRequest
0 голосов
/ 29 сентября 2019

Я пытаюсь записать результат нескольких операций в кластер AWS Aurora PostgreSQL. Все вычисления выполняются правильно, но, когда я пытаюсь записать результат в базу данных, я получаю следующую ошибку:

py4j.protocol.Py4JJavaError: An error occurred while calling o12179.jdbc.
: java.lang.StackOverflowError
    at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$2.apply(TreeNode.scala:256)
    at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$2.apply(TreeNode.scala:256)
    at org.apache.spark.sql.catalyst.trees.CurrentOrigin$.withOrigin(TreeNode.scala:70)
    at org.apache.spark.sql.catalyst.trees.TreeNode.transformDown(TreeNode.scala:255)

Я уже пытался увеличить размер кластера (15 машин r4.2xlarge), изменить числоразделы для данных на 120 разделов, измените память исполнителя и драйвера на 4Gb каждый, и я столкнулся с теми же результатами.

Текущая конфигурация SparkSession следующая:

spark = pyspark.sql.SparkSession\
                   .builder\
                   .appName("profile")\
                   .config("spark.sql.shuffle.partitions", 120)\
                   .config("spark.executor.memory", "4g").config("spark.driver.memory", "4g")\
                   .getOrCreate()

Надеюсьне знаю, если это проблема конфигурации Spark или это проблема программирования.

1 Ответ

0 голосов
/ 30 сентября 2019

Наконец-то я обнаружил проблему.

Проблема заключалась в итеративном чтении из S3, создающем действительно большой DAG. Я изменил способ чтения файлов CSV из S3 с помощью следующей инструкции:

    df = spark.read\
              .format('csv')\
              .option('header', 'true')\
              .option('delimiter', ';')\
              .option('mode', 'DROPMALFORMED')\
              .option('inferSchema', 'true')\
              .load(list_paths)

Где list_paths - это предварительно рассчитанный список путей к объектам S3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...