【问题标题】:Unable to Merge Small ORC Files using Spark无法使用 Spark 合并小型 ORC 文件
【发布时间】:2019-02-11 13:30:44
【问题描述】:

我有一个包含大量小文件的外部 ORC 表,这些小文件每天都来自源。我需要将这些文件合并成更大的文件。

我尝试将 ORC 文件加载到 spark 并使用覆盖方法保存

val fileName = "/user/db/table_data/"  //This table contains multiple partition on date column with small data files.
val df = hiveContext.read.format("orc").load(fileName)
df.repartition(1).write.mode(SaveMode.Overwrite).partitionBy("date").orc("/user/db/table_data/)

但是mode(SaveMode.Overwrite) 正在从 HDFS 中删除所有数据。当我尝试不使用mode(SaveMode.Overwrite) 方法时,它抛出错误文件已存在。

谁能帮我继续?

【问题讨论】:

  • 您需要将它们保存到另一个目录。作业完成后,您可以将旧目录替换为新目录。
  • 我可以试试这个来解决我的问题。但是write.mode(SaveMode.Overwrite)有什么用,如果我们需要在作业完成后移动文件。
  • SaveMode.Overwrite 表示 Spark 在运行作业之前清除目标目录(如果存在)。在您的情况下,您的源目录和目标目录是相同的。当您需要多次运行作业并且不想清除上次运行的结果时,SaveMode.Overwrite 很有用。
  • 谢谢@Avseiytsev。我现在清楚为什么要使用 SaveMode.Overwrite。

标签: apache-spark hadoop hadoop2 orc


【解决方案1】:

正如@Avseiytsev 所建议的,我已将合并的orc 文件作为HDFS 中的源存储在不同的文件夹中,并在作业完成后将数据移动到表路径中。

【讨论】:

    猜你喜欢
    • 2018-04-10
    • 2018-10-07
    • 2018-06-09
    • 2020-02-19
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 2017-06-05
    相关资源
    最近更新 更多