【问题标题】:Exporting spark dataframe to .csv with header and specific filename使用标题和特定文件名将 spark 数据帧导出到 .csv
【发布时间】:2018-07-17 01:11:03
【问题描述】:

我正在尝试将数据从 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 命令。

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

谢谢!

【问题讨论】:

  • 如果你可以把它拉下来并命名为任何你喜欢的名字,它在 HDFS 上的名称是否重要? hadoop fs -cat path/to/output/part-r-* > path/to/local/file.csv 会将所有部分从 Hadoop 转储到本地磁盘上的一个文件中。
  • 我正在尝试构建一个自动化的 pyspark etl 作业,因此我避免了各种手动和本地系统干预。我的问题很简单“将数据从 spark 数据帧导出到 .csv 文件时,文件名应为“part-00000”。感谢您的回复。
  • 我以前从未见过这种类型的文件名。也许该文件已经存在并且这个长名称是为了避免覆盖该文件?
  • 不,我确实清理了目标文件夹并重新运行了这项工作。这没有帮助。
  • AFAIK,文件名为part-#{partition number}-#{random uuid}-#{something}。 AFAIK,UUID 是允许多个执行程序写入同一个目录,而不必担心尝试写入同一个文件。

标签: python apache-spark pyspark export-to-csv databricks


【解决方案1】:

好吧,虽然我的问题得到了 -3 分,但我在这里发布了帮助我解决问题的解决方案。作为一名技术人员,我总是更关心代码/逻辑而不是研究语法。至少对我来说,一个小的上下文应该可以理解这个问题。

提出解决方案:

当我们从 spark 数据框创建一个 .csv 文件时,

输出文件默认命名为 part-x-yyyyy 其中:

1) x 是 'm' 或 'r',取决于作业是仅地图作业还是 reduce 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 文件。

【讨论】:

  • 嘿伙计,对不起,有人因为语法问题而批评你。这是他们的不良行为。
  • 嗯。射击。我遇到了您的问题,并希望能够设置它,而不是使用命令在文件系统上重命名。是时候去挖掘了!
  • 库看起来不像是可能的,但人们指向此以获取有关添加此功能的更多信息:wiki.apache.org/hadoop/…
  • 你能找到输出文件并重命名它吗?例如使用glob 获取文件,然后使用预期的文件名重命名或创建它的副本?
猜你喜欢
  • 1970-01-01
  • 2017-04-15
  • 1970-01-01
  • 1970-01-01
  • 2019-11-25
  • 2023-01-18
  • 2014-11-19
  • 2018-02-14
  • 1970-01-01
相关资源
最近更新 更多