spark--当分组遇到排序的解决思路

博客探讨了在Spark环境中如何处理分组和排序的挑战。面对数据量大、分类不确定的情况,通常需要先统计分类,然后使用分区器确保每个分类对应一个分区,通过本地数据合并减少数据量。由于Spark的算子主要针对key操作,因此需要创建包含key和value的对象以满足分区和排序需求。最后,强调了在大数据环境下,应优先考虑数据合并,减少shuffle操作的代价。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景

现在有如下数据格式

图书分类,图书名,数量

现在想统计全部分类中数量最多的书名以及数量

场景解析

如果不基于spark,我们来思考这个问题,数据量大内存是放不下,分类也不确定有多少类,图书名可能有重复,还需要合并计算。这种情况只能是分治,首先分类,把文件首先按照分类拆分成多个文件,每个文件中的数据都是图书名数量,然后根据图书名对数量进行合并,最后进行排序。整理了一份适合2018年学习的大数据资料需要的加群QQ群:834325294 注明CSDN既可免费获取

spark思维转化

上面的思路单独写这个程序没问题,但是如果基于spark就有点问题了,首先是分区的事情,想把数据准确落在不同的分区,且不重复,必须要先知道到底有多少分区。所以首先要统计分类种类,帮助以后分区。

分区器

有了数据就要应用分区器

直接根据已经生成好的数据来进行分区。保证1个分类1个分区,这样就可以以后的部分就只关注排序即可。

数据合并

分区,分区器都准备好了,按照以前的思路,是不是应该把数据分散在不同的分区了。想法挺好,但是在分布式存储中,数据移动的成本很高,所以都是先对本地数据进行处理合并,减小数据量然后才进行数据的shuffle等分区操作,所以这里我们要做的其实是合并同类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值