如何在 SparkSQL 中合并小文件? [复制]

Posted

技术标签:

【中文标题】如何在 SparkSQL 中合并小文件? [复制]【英文标题】:How to merge small files in SparkSQL? [duplicate] 【发布时间】:2018-10-11 00:24:06 【问题描述】:

我正在使用 SparkSQL 运行 Spark 应用程序。如何合并小文件?我知道 .repartition.coalesce 但这不能使用 SparkSQL 完成。

【问题讨论】:

spark.sql 返回一个数据帧,在写入不同位置之前确实可以合并和重新分区 如果里面的sql是CTAS,我该怎么做? spark.sql("create table as select....") 目前制作的文件大小是多少?有多少个文件? 1-5MB 文件,它正在生成 20000 个文件 我认为一般建议是使用spark.sql,获取一个数据框,然后在合并后使用df.write,输出一些Parquet(或ORC)数据,然后使用create external table运行您写信的位置 【参考方案1】:

摘自DeepSense 工程博客(2016 年)

Distribute bycluster by 子句是 SparkSQL 中非常酷的特性。不幸的是,这个主题仍然相对 大多数用户都不知道...

SET spark.sql.shuffle.partitions = 2SELECT * FROM df DISTRIBUTE BY key

DataFrame API 中的等效项:df.repartition($"key", 2)

...

警告:我不能证明它像宣传的那样有效;当我找到那个博客时,它看起来很有前途,但从那以后它就一直在我的待办事项列表上:-/

【讨论】:

以上是关于如何在 SparkSQL 中合并小文件? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Impala合并小文件

如何将大量小文件合并为一个文件

将 T-SQL ISNULL 函数逻辑复制到 SparkSQL

Hadoop:如何将 reducer 输出合并到单个文件中? [复制]

如何使用 AWK 合并两个文件? [复制]

如何合并两个 JSON 文件? [复制]