如何在 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 by 和 cluster by 子句是 SparkSQL 中非常酷的特性。不幸的是,这个主题仍然相对 大多数用户都不知道...
SET spark.sql.shuffle.partitions = 2
SELECT * FROM df DISTRIBUTE BY key
DataFrame API 中的等效项:
df.repartition($"key", 2)
...
警告:我不能证明它像宣传的那样有效;当我找到那个博客时,它看起来很有前途,但从那以后它就一直在我的待办事项列表上:-/
【讨论】:
以上是关于如何在 SparkSQL 中合并小文件? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
将 T-SQL ISNULL 函数逻辑复制到 SparkSQL