需求
1、输入数据:
keyA 1
keyB 3
keyB 77
keyB 54
keyA 2
keyC 22
keyC 221
keyC 20
2、目标输出
keyA 1,2
keyB 3,54,77
keyC 20,22,221
解决思路
STEP 1. 改装Map结构,组合成一个新的Key值
MR框架不管是 默认排序 或者是 自定义排序 都只是对Key值进行排序,但我们可以将原始数据的Key值和其对应的Value值 组合成一个新的Key值。即原始数据的Map改装如下:
keyA,1 1
keyB,3 3
keyB,77 77
..
STEP 2. 自定义分区 setPartitionerClass,将Key第一个字段相同 放到一个Reduce中
对新的Key 进行排序,需要自定义 分区处理器(如果 新Key的 第一个字段相同,放到同一个Reduce中进行分组合并)
Map Shuffer 分区操作后,输出的数据流如下: