【发布时间】: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