pyspark:在外部存储上将大型数据帧保存为 csv 时出现异常

pyspark: Exception while saving Large dataframes as csv on external storage

我有一个数据框,在 pyspark 的变量 df 中有大约 4000 个条目。 当我尝试将数据作为 csv 导出到外部存储时,出现如下奇怪的错误:

Caused by: org.apache.spark.SparkException: Job aborted due to stage failure: Task 12 in stage 9.0 failed 1 times, most recent failure: Lost task 12.0 in stage 9.0 (TID 21, localhost, executor driver): org.apache.spark.SparkException: Task failed while writing rows

Caused by: java.lang.StringIndexOutOfBoundsException: offset 2124, count 3889, length 4096

py4j.protocol.Py4JJavaError: An error occurred while calling o77.csv.
: org.apache.spark.SparkException: Job aborted.

我的写入命令如下:

df.write.csv("data/out", sep="@", mode="overwrite")

我的数据在上下文中包含 ,,因此我指定自定义分隔符 @

如果我设置限制 20,我可以导出 csv。意味着一个文件只命名为 part-00000-683794ef-bc5e-4566-9e2f-89dd55725571-c000.csv。此外,如果我使用 df.write.json() 成功完成但未在 csv 中完成。

但是当我尝试输出完整的 dataFrame 时出现错误。

知道是什么原因造成的。

DataFrame 的架构:

root
 |-- _c1: string (nullable = true)
 |-- _c2: string (nullable = true)
 |-- _c3: string (nullable = true)
 |-- _c4: string (nullable = true)
 |-- _c5: string (nullable = true)

Java 9 在 Spark 中还不支持(也许在 Spark3 中会支持)。人们通常在写入或读取文件时遇到很多问题。

尝试安装 java 8。让我知道它是否有效。 不要忘记更新您的 java 版本并设置所有必要的环境变量。