【问题标题】:Spark CSV 2.1 File NamesSpark CSV 2.1 文件名
【发布时间】:2023-04-01 05:57:01
【问题描述】:

我正在尝试使用新的 spark 2.1 csv 选项将 DataFrame 保存到 CSV 中

 df.select(myColumns: _*).write
                  .mode(SaveMode.Overwrite)
                  .option("header", "true")
                  .option("codec", "org.apache.hadoop.io.compress.GzipCodec")
                  .csv(absolutePath)

一切正常,我不介意使用 part-000XX 前缀 但现在似乎添加了一些 UUID 作为后缀

i.e
part-00032-10309cf5-a373-4233-8b28-9e10ed279d2b.csv.gz ==> part-00032.csv.gz

任何人都知道我如何删除这个文件 ext 并且只保留 part-000XX 约定

谢谢

【问题讨论】:

  • 感谢@Dhanesh,但我使用的是 S3,所以在文件持久化后重命名并不是那么简单(考虑文件可以大于 5GB)。 part-000XX 没问题。我不太喜欢附加在后缀上的新 UUID 号码
  • 只看到两个选项 - 将 s3 文件移动到具有所需名称的新文件,或者保存到本地 FS 或 HDFS,重命名并将其移动到 S3。 stackoverflow.com/questions/21184720/…

标签: apache-spark spark-dataframe spark-csv


【解决方案1】:

您可以通过覆盖配置选项“spark.sql.sources.writeJobUUID”来删除 UUID:

https://github.com/apache/spark/commit/0818fdec3733ec5c0a9caa48a9c0f2cd25f84d13#diff-c69b9e667e93b7e4693812cc72abb65fR75

不幸的是,此解决方案不会完全反映旧的 saveAsTextFile 样式(即 part-00000),但可以使输出文件名更加合理,例如 part-00000-output.csv.gz 其中“输出”是您传递的值到spark.sql.sources.writeJobUUID。 “-”是自动附加的

SPARK-8406 是相关的 Spark 问题,这里是实际的 Pull Request:https://github.com/apache/spark/pull/6864

【讨论】:

  • 显然,对于最近版本的 spark,这不再是一个选项,名称在内部创建为 f"part-$split%05d-$jobId$ext" github.com/apache/spark/blob/branch-2.3/core/src/main/scala/org/… 并且 jobId 来自 hadoops " mapreduce.job.id" 最好不要被篡改
  • 嗯,你知道在新版本中实现类似目标的新方法吗?
  • 唉,除了修补 spark 本身之外找不到任何方法,并且考虑到维护成本和这种行为的明显“错误”,我们决定重写依赖它的系统部分。其他选项是拉取请求以恢复此配置选项,但看起来不太好,因为它已被重构一次。此外,我们团队中实际上没有 spark 提交者来帮助我们打这场艰苦的战斗^_^
猜你喜欢
  • 2017-11-29
  • 1970-01-01
  • 2017-09-13
  • 2021-09-29
  • 1970-01-01
  • 2021-04-16
  • 1970-01-01
  • 2015-10-18
相关资源
最近更新 更多