Spark 2.1 - постоянный пул для класса SpecificUnsafeProjection превысил предел JVM в 64 КБ

Прошу прощения за мое невежество, так как я новичок в pyspark и Spark. Я работаю над обновлением Spark с 1.6.3 до 2.1 и сталкиваюсь с проблемами при запуске нашей модели с использованием pyspark.

Все, что мы делаем во время работы скрипта python, который выдает ошибку, мы читаем в JSON и конвертируем его в DF, используя что-то вроде ниже

df_read = sparkSession.read.json('path to json file')

После этого прочтения мы выполним некоторые операции над DF, запустим некоторые UDF над столбцами и затем в конечном итоге захотим записать обратно в JSON, который затем будет выбран и записан в таблицы Apache Phoenix.

Мы получаем следующее исключение при попытке выполнить любое терминальное действие на DF, например show() или же take() или любой такой.

Я прочитал ( https://issues.apache.org/jira/browse/SPARK-18016?focusedCommentId=16348980&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel) вот эту проблему является то, что спарк не может иметь дело с очень широкими столбцами, и эта проблема исправлена ​​в версии 2.3.

У нас есть около 450 столбцов в DF, которые мы хотим написать.

Мой вопрос в том, что в настоящее время мы не можем перейти на Spark 2.3, есть ли способ обойти это? Можно разделить столбцы на 2 DF, а затем объединить их и написать или что-то в этом роде?

18/12/03 12:34:30 WARN TaskSetManager: Lost task 0.0 in stage 1.0 (TID 1, xhadoopm686p.aetna.com, executor 1): java.util.concurrent.ExecutionException: java.lang.Exception: failed to compile: org.codehaus.janino.JaninoRuntimeException: Constant pool for class org.apache.spark.sql.catalyst.expressions.GeneratedClass$SpecificUnsafeProjection has grown past JVM limit of 0xFFFF

После вышеприведенного исключения он печатает некоторый сгенерированный код, и задание не выполняется.

Любая информация действительно ценится.

1 ответ

Я смог обойти эту проблему, удалив все вложенные структуры в коде. Мы создавали несколько массивов для промежуточных вычислений, которые и вызывали эту проблему.

Спасибо!

Другие вопросы по тегам