将 Spark 数据帧导出到带有标题和特定文件名的 .csv

2024-02-02

我正在尝试将数据从 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 命令的方式受到限制。

如何在保留文件头的同时设置文件名?

Thanks!


好吧,虽然我的问题的评分为 -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)

仅供参考,如果我们使用 rdd.saveAsTextFile 选项,则会创建没有标头的文件。如果我们使用coalesce(1).write.format("com.databricks.spark.csv").option("header", "true").save(output_path),使用随机的 x 部分名称创建文件。上述解决方案将帮助我们创建一个带有标题、分隔符以及所需文件名的 .csv 文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Spark 数据帧导出到带有标题和特定文件名的 .csv 的相关文章

随机推荐