Исключение блоков данных: общий размер сериализованных результатов больше, чем spark.driver.maxResultsSize - PullRequest
0 голосов
/ 30 октября 2018

Я запускаю код в Apache Spark на Azure, который преобразует более 3 миллионов XML-файлов в один CSV-файл. Когда я хочу это сделать, я получаю следующую ошибку:

org.apache.spark.SparkException: задание прервано из-за сбоя этапа: общий размер сериализованных результатов 1408098 задач (4,0 ГБ) больше, чем spark.driver.maxResultSize (4,0 ГБ)

Я знаю, что означает ошибка в целом, но я не знаю, что это значит в моем случае, и я не понимаю, как ее решить.

Код:

Все XML-файлы загружены:

df = spark.read.format('com.databricks.spark.xml').option("rowTag", "ns0:TicketScan").load('LOCATION/*.xml')

Все загруженные файлы помещаются в CSV-файл:

 def saveDfToCsv(df, tsvOutput):
  tmpParquetDir = "dbfs:/tmp/mart1.tmp.csv"
  dbutils.fs.rm(tmpParquetDir, True)
  df.repartition(1).write.format("com.databricks.spark.csv").option("header", "true").save(tmpParquetDir)
  src = filter(lambda x: "part-00000" in x.name, dbutils.fs.ls('dbfs:/tmp/mart1.tmp.csv'))[0].path
  dbutils.fs.mv(src, tsvOutput)

saveDfToCsv(df, 'LOCATION/database.csv')

Надеюсь, мой вопрос достаточно ясен. Если нет, пожалуйста, позвольте мне объяснить это дальше.

Я надеюсь, что кто-то может мне помочь.

С уважением.

1 Ответ

0 голосов
/ 31 октября 2018

Похоже, что ваш драйвер имеет ограниченный размер для хранения результата, и ваши результирующие файлы пересекают ограничение, поэтому вы можете увеличить размер результата с помощью следующей команды в вашей записной книжке.

sqlContext.getConf("spark.driver.maxResultSize")
res19: String = 20g

Текущий максимальный размер хранилища равен 20 ГБ, мой

.
sqlContext.setConf("spark.driver.maxResultSize","30g")

Чтобы увеличить maxResultSize, вы можете использовать приведенную выше команду.

Это не рекомендуется, потому что это уменьшает размер производительности вашего кластера, потому что тогда вы минимизируете свободное пространство, выделяемое временным файлам для обработки в кластере. Но я думаю, что это решило вашу проблему.

...