Spark save csv文件,对象存储中没有_temporary文件夹



我正在尝试使用pyspark将csv文件写入远程文件系统,并将分区设置为2048以使这些csv文件足够小。这个远程文件系统是一个对象存储服务,但是它提供了一个类,允许它像hadoop一样使用。我用来将CSV文件写入这个远程文件系统的代码非常简单,类似于以下代码:

df = ... # obtain data from database
df.write.csv(dsn, mode="overwrite", sep=sep, encoding=encoding, quote=""",
escape=""")

我遇到的问题是,PySpark写数据到_temporary文件夹时,速度非常快,可以在6分钟内完成。但是,将内容移出_temporary文件夹需要一个半小时。

我正在使用Spark 2.4.0(很难更新到新版本),我想知道是否有一种方法可以直接编写CSV文件,而不使用_temporary文件夹。

经过几个小时的搜索,我找到了许多相关的主题,但没有一个能解决我的问题。

  • spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version=2。但是基于这个答案,v2算法也使用了临时文件。
  • 更改输出提交者,但这似乎只适用于parquet,我需要编写csv文件。
  • 零重命名提交者,但这似乎适用于地址"s3:",可能是更高的spark版本。

hadoop s3a "zero rename committer"工作与CSV文件,并与spark 2.4兼容;你只需要一个包含spark-hadoop-cloud模块Hadoop 3.2+二进制文件的版本

它只适用于AWS S3和非常兼容的第三方商店,通过s3a://url。

最新更新