Hive 如何合并sparksql保存在配置单元上的小文件?

Hive 如何合并sparksql保存在配置单元上的小文件?,hive,pyspark-sql,Hive,Pyspark Sql,与下面的代码类似,在配置单元表中插入一个数据帧。配置单元的输出hdfs文件包含太多的小文件。在配置单元上保存时如何合并它们? myDf.write.formatorc.partitionBydatestr.insertIntomyHiveTable 当有100个任务时,它将生成100个小文件 在dataframe上使用coalesce是个好主意吗? myDf.coalesce3.write.formatorc.partitionBydatestr.insertIntomyHiveTable 为什

与下面的代码类似,在配置单元表中插入一个数据帧。配置单元的输出hdfs文件包含太多的小文件。在配置单元上保存时如何合并它们? myDf.write.formatorc.partitionBydatestr.insertIntomyHiveTable

当有100个任务时,它将生成100个小文件

在dataframe上使用coalesce是个好主意吗? myDf.coalesce3.write.formatorc.partitionBydatestr.insertIntomyHiveTable

为什么如下配置的配置单元不起作用? sqlContext.sqlset-hive.merge.mapfiles=true sqlContext.sqlset配置单元.merge.sparkfiles=false sqlContext.sqlset配置单元.merge.smallfiles.avgsize=16000000 sqlContext.sqlset配置单元.merge.size.per.task=256000000

非常感谢您的帮助。

这是因为SparkSQL返回与spark分区数量相关的文件数。即使动态分区配置处于启用状态

我也面临同样的问题。在我看来,上面提到的配置只适用于MapReduce引擎上的配置单元:在我的例子中,HiveQL命令工作得很好,小文件正在合并


有关更多详细信息,请参阅。

我遇到此问题并发现

在spark sql查询中使用/*+合并分区*/或/*+重新分区*/将控制输出文件号


在我的文章中,我向用户推荐第二个parm,因为它将生成一个新的阶段来完成这项工作,而第一个parm不会,这可能会导致工作死亡,因为最后一个阶段的任务更少。

正在创建的100个小文件平均有多大?