Spark dataFrame.colaesce(1)或dataframe . repartition(1)似乎不起作用



我有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创建大约200个大约20 mb的小文件。我想只有一个part0000文件的性能原因时,使用Hive。我在想,如果我调用coalesce(1),那么它将创建最终的一部分文件,但它似乎没有发生。我错了吗?

重分区管理在执行Spark作业时拆分文件的多少块,而文件的实际保存由Hadoop集群管理。

我是这么理解的。你也可以在这里看到同样的问题:http://mail-archives.us.apache.org/mod_mbox/spark-user/201501.mbox/%3CCA+2Pv=hF5SGC-SWTwTMh6zK2JeoHF1OHPb=WG94vp2GW-vL5SQ@mail.gmail.com%3E

这应该无关紧要,但为什么要设置在单个文件上?如果只是在你自己的系统中,Getmerge会为你编译它们。

df.coalesce(1)在spark 2.1.1中为我工作,所以任何人看到这个页面,不必像我一样担心。

df.coalesce(1).write.format("parquet").save("a.parquet") 

相关内容

  • 没有找到相关文章

最新更新