当我使用Spark HiveContext做像insert overwrite a select * from b
这样的sql时,最后在HDFS的表对应的目录上有很多小文件(400+),其中很多是空文件。因此,我尝试使用coalesce
来减少文件数量,示例代码为:
val df = hiveContext.sql("insert overwrite a select * from b")
df.coalesce(50).collect
但是输出文件仍然是400+,看起来coalesce
不起作用。
有人能帮帮我吗?
您的示例将不会合并输出文件,因为coalesce
是在执行SQL与insert into
和insert into
结果之后完成的(我认为这是一个空的Dataframe)。
试着这样重写代码:
hiveContext.sql("select * from b").coalesce(50).write.mode("overwrite").saveAsTable("a")