【发布时间】:2018-06-09 16:37:42
【问题描述】:
我正在从 s3 读取 csv 文件并作为兽人写入配置单元表。在写入时,它正在写入很多小文件。我需要合并所有这些文件。我设置了以下属性:
spark.sql("SET hive.merge.sparkfiles = true")
spark.sql("SET hive.merge.mapredfiles = true")
spark.sql("SET hive.merge.mapfiles = true")
spark.sql("set hive.merge.smallfiles.avgsize = 128000000")
spark.sql("set hive.merge.size.per.task = 128000000")
除了这些配置之外,我还尝试了 repartition(1) 和 coalesce(1),它们将合并到单个文件中,但它会删除 hive 表并重新创建它。
masterFile.repartition(1).write.mode(SaveMode.Overwrite).partitionBy(<partitioncolumn>).orc(<HIVEtablePath>);
如果我使用追加模式而不是覆盖模式,它会在每个分区下创建重复文件。
masterFile.repartition(1).write.mode(SaveMode.Append).partitionBy(<partitioncolumn>).orc(<HIVEtablePath>);
在这两种情况下,spark 作业都会运行两次,但在第二次执行时失败。
有没有什么方法可以在附加模式下使用 repartition/coalesce 而不在每个分区中复制部分文件?
【问题讨论】:
-
您好,您的问题找到答案了吗?我也有同样的问题。
标签: hadoop apache-spark merge hive