我正在尝试将数据从spark数据框导出到.csv文件:
df.coalesce(1)\
.write\
.format("com.databricks.spark.csv")\
.option("header", "true")\
.save(output_path)
正在创建一个文件名" part-r-00001-512872f2-9b51-46c5-b0ee-31d626063571.csv"
我希望文件名是" part-r-00000.csv"或" part-00000.csv"
在AWS S3上创建文件时,我对如何使用os.system命令的限制。
如何在将标题保留在文件中的同时设置文件名?
谢谢!
答案 0 :(得分:5)
好吧,虽然我的问题得到-3评级,但我在这里发布的解决方案帮我解决了这个问题。我是一名技术人员,总是更多地关注代码/逻辑而不是研究语法。至少对我来说,应该通过一个小的背景来理解这个问题。
来到解决方案:
当我们从spark数据帧创建.csv文件时,
输出文件默认名为part-x-yyyyy,其中:
1)x是“m”或“r”,具体取决于作业是仅作业图还是减少作业 2)yyyyy是mapper或reducer任务号,可以是00000或随机数。
为了重命名输出文件,运行os.system HDFS命令应该这样做。
import os, sys
output_path_stage = //set the source folder path here
output_path = // set the target folder path here
//creating system command line
cmd2 = "hdfs dfs -mv " + output_path_stage + 'part-*' + ' ' + output_path + 'new_name.csv'
//executing system command
os.system(cmd2)
fyi,如果我们使用rdd.saveAsTextFile选项,则创建的文件没有标头。如果我们使用coalesce(1).write.format("com.databricks.spark.csv").option("header", "true").save(output_path)
,则使用随机part-x名称创建文件。上面的解决方案将帮助我们创建一个包含标题,分隔符和所需文件名的.csv文件。