Spark dataFrame.colaesce(1) 或 dataFrame.reapartition(1) 似乎不起作用
Spark dataFrame.colaesce(1) or dataFrame.reapartition(1) does not seem to work
我将 Hive 插入到创建新 Hive 分区的查询中。我有两个名为服务器和日期的 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 的小文件。在使用 Hive 时,出于性能原因,我只需要一个 part0000 文件。我在想如果我调用 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")
我将 Hive 插入到创建新 Hive 分区的查询中。我有两个名为服务器和日期的 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 的小文件。在使用 Hive 时,出于性能原因,我只需要一个 part0000 文件。我在想如果我调用 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")