您现在的位置是:首页 > 文章详情

Spark SQL repartition 为啥生成的文件变大了?

日期:2020-05-28点击:518

记录一个客户问题

客户用Spark SQL的repartition接口来解决Hive ORC表小文件的问题,发现文件膨胀的很厉害

比如原来有1000个小文件,总大小是500MB
repartition(10) 再 insert overwrite之后

10个文件 总大小是2~3GB

但是检查了一下最终的两个分区的 row count是一致的

调查结论

先说一下这两接口不同

repartition 把record完全打乱最终随机插入到10个文件 有Shuffle
coalesce 把相邻的分区的数据捏在一起,没有Shuffle

为啥shuffle打乱数据会让最终的表输出文件变大

其实就是 ORC 数据编码问题
原来的源分区其实是通过HashPartition的方式分布的,这样的数据分布可以让ORC的编码压缩得更加极致,而repartition完全打乱后导致本来在一个文件的相同记录分布到10个文件,那就是每个文件都有该记录的编码索引,那么最终文件就变大了

所以推荐使用 coalesce 接口来做类似的事情

原文链接:https://yq.aliyun.com/articles/763006
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章