【发布时间】:2020-10-11 06:37:26
【问题描述】:
我将 Hive 插入到创建新 Hive 分区的查询中。我有两个名为 server 和 date 的 Hive 分区。现在我使用以下代码执行插入查询并尝试保存它
DataFrame dframe = hiveContext.sql("insert into summary1 partition(server='a1',date='2015-05-22') select from sourcetbl bla bla");
//above query creates orc file at /user/db/a1/20-05-22
//I want only one part-00000 file at the end of above query so I tried the following and none worked
drame.coalesce(1).write().format("orc").mode(SaveMode.OverWrite).saveAsTable("summary1"); OR
drame.repartition(1).write().format("orc").mode(SaveMode.OverWrite).saveAsTable("summary1"); OR
drame.coalesce(1).write().format("orc").save("/user/db/a1/20-05-22",SaveMode.OverWrite); OR
drame.repartition(1).write().format("orc").save("/user/db/a1/20-05-22",SaveMode.OverWrite); OR
无论我在上面的查询中使用合并还是重新分区,都会在 /user/db/a1/20-05-22 位置创建大约 20 MB 的大约 200 个小文件。在使用 Hive 时,出于性能原因,我只需要一个 part0000 文件。我在想如果我打电话给coalesce(1) 那么它会创建最后一个零件文件,但它似乎没有发生。我错了吗?
【问题讨论】:
-
但是你得到了什么?
-
就像我提到的那样,由于 coalesce(1),我得到了 200 个小文件,而不是预期的一个部分文件
标签: apache-spark apache-spark-sql