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 ответ
Я смог обойти эту проблему, удалив все вложенные структуры в коде. Мы создавали несколько массивов для промежуточных вычислений, которые и вызывали эту проблему.
Спасибо!