Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 无法使用Spark合并小ORC文件_Apache Spark_Hadoop_Hadoop2_Orc - Fatal编程技术网

Apache spark 无法使用Spark合并小ORC文件

Apache spark 无法使用Spark合并小ORC文件,apache-spark,hadoop,hadoop2,orc,Apache Spark,Hadoop,Hadoop2,Orc,我有一个外部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

我有一个外部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/)
但是
模式(SaveMode.Overwrite)
正在删除HDFS中的所有数据。当我尝试不使用
模式(SaveMode.Overwrite)
方法时,它抛出的错误文件已经存在


有人能帮我继续吗?

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

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