Databricks 异常:序列化结果的总大小大于 spark.driver.maxResultsSize

Gan*_*ard 6 python azure apache-spark databricks

我正在 Azure 上的 Apache Spark 中运行一个代码,它将超过 300 万个 XML 文件转换为一个 CSV 文件。当我想这样做时,我收到以下错误:

org.apache.spark.SparkException:由于阶段失败而中止作业:1408098 个任务的序列化结果的总大小 (4.0 GB) 大于 spark.driver.maxResultSize (4.0 GB)

我知道错误通常意味着什么,但我不知道它在我的情况下意味着什么,我不明白如何解决这个问题。

代码是:

加载所有 XML 文件:

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

所有加载的文件都放入一个 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')
Run Code Online (Sandbox Code Playgroud)

我希望我的问题足够清楚。如果没有,请允许我进一步解释。

我希望有一个人可以帮助我。

此致。

Sal*_*uri 4

您需要在集群配置中更改此参数。进入集群设置,在“高级”下选择“火花和粘贴” spark.driver.maxResultSize 0(无限制)或任何适合您的值。不建议使用 0。您应该通过重新分区来优化作业。