Я видел различные темы по этой проблеме, но приведенные решения не работают в моем случае.
Среда с pyspark 2.1.0, Java 7 и имеет достаточно памяти и ядер.
Я запускаю задание spark-submit, которое работает с файлами Json, задание отлично работает с размером файла ‹ 200 МБ, но если его больше, оно завершается сбоем из-за Контейнер вышел с ненулевым кодом выхода 143 затем я проверил журналы пряжи и обнаружил ошибку java.lang.OutOfMemoryError: Запрошенный размер массива превышает лимит виртуальной машины
Поскольку файл json не имеет формата, который можно напрямую прочитать с помощью spark.read.json(), первым шагом в приложении является чтение json как текстового файла в rdd для применения карты и flatMap для скрытого в требуемый формат, затем используйте spark.read.json(rdd) для создания кадра данных для дальнейшей обработки, код ниже
def read_json(self, spark_session, filepath):
raw_rdd = spark_session.sparkContext.textFile(filepath)
raw_rdd_add_sep = raw_rdd.map(lambda x:x.replace('}{','}}{{'))
raw_rdd_split = raw_rdd_add_sep.flatMap(lambda x:x.split('}{'))
required_df = spark_session.read.json(raw_rdd_split)
return required_df
Я попытался увеличить накладные расходы памяти для исполнителя и драйвера, что не помогло, используя параметры spark.driver.memoryOverhead , spark.executor.memoryOverhead
Также я включил параметры Off-Heap spark.memory.offHeap.enabled и установил значение spark.memory.offHeap.size.
Я попытался установить параметр памяти JVM с помощью spark.driver.extraJavaOptions=-Xms10g.
Таким образом, приведенные выше параметры не работают в этом сценарии, некоторые файлы Json имеют размер почти 1 ГБ, и мы должны обрабатывать ~ 200 файлов в день.
Может ли кто-нибудь помочь решить эту проблему, пожалуйста?