我正在尝试使用pysparkn和spark-csv使用以下代码将spark数据帧写入s3
df1.filter( df1['y'] == 2)\
.withColumnRenamed("x",'a')\
.select("a","b","c")\
.write\
.format('com.databricks.spark.csv')\
.options(header="true")\
.options(codec="org.apache.hadoop.io.compress.BZip2Codec")\
.save('s3://bucket/abc/output")
但是,我收到错误"输出目录已存在", 我确信在作业开始之前输出目录不存在,我尝试使用不同的输出目录名称运行,但写入仍然失败。
如果我在作业失败后查看s3存储桶,我发现有很少的部分文件是由spark编写的,但是当它尝试编写更多它失败时,脚本在本地运行正常,我在aws集群上使用10个spark执行器。有没有人知道这段代码有什么问题?
答案 0 :(得分:1)
尝试使用下面的代码,它应该解决问题。在内部,它使用Hadoop api来检查文件的存在。请检查日志到执行程序。你可能会发现一些有用的东西。
df1.filter( df1['y'] == 2)\
.withColumnRenamed("x",'a')
.select("a","b","c")
.write
.mode(Overwrite)
.format('com.databricks.spark.csv')
.options(header="true")
.options(codec="org.apache.hadoop.io.compress.BZip2Codec")
.save('s3://bucket/abc/output")