apache beam入门之group分组操作

目录:apache beam 个人使用经验总结目录和入门指导(Java)

如果我们希望将相同的元素进行分组,则可以用Group的转化方法进行操作
首先我们生成1个单词数据集

List<String> strLists = new ArrayList<>();
strLists.add("cat");
strLists.add("cat");
strLists.add("cat");
strLists.add("dog");
strLists.add("dog");
strLists.add("panda");
// 创建字符串输入
PCollection<String> words = pipeline.apply(Create.of(strLists));

接着要引入1个KV的类, 这个类在beam里很重要
KV.of(key, value) 即可生成1个键值对
我们把每个单词都变成 (单词,1)的键值对

// 全部转成KV形式
PCollection<KV<String, Integer>> kvpCollection
	= words.apply(MapElements.via(new SimpleFunction<String, KV<String, Integer>>() {
	@Override
	public KV<String, Integer> apply(String str) {
		return KV.of(str, 1);
}
}));

PCollection<KV<String, Integer>> kvpCollection里的内容如下:
KV[cat,1]
KV[cat,1]
KV[cat,1]
KV[dog,1]
KV[dog,1]
KV[panda,1]

接着我们组装GroupByKey,即可进行分组

PCollection<KV<String, Iterable<Integer>>> groupKv = kvpCollection.apply(GroupByKey.create());

我们会得到1个KV<String,Iterable<Integer> >, 可以理解为如下:
KV[cat, [1,1,1]]
KV[dog, [1,1]]
KV[panda, [1]]
即所有键值为cat的kv都合到了一起,组成了1个迭代器,完成了分组,后续我们就可以对这3个KV里的迭代器做操作,计算单词数量, 也就完成了一次wordCount的例子。
注意事项: 分组的键值类型不可以是Double或者Float,因为这2个类型是不精确的类型,无法进行精确分组,使用时会报错

直接用官方SDK做wordCount

假设我们有了PCollection<KV<String, Integer>> kvpCollection, 可以不用GroupByKey,而是直接

PCollection<KV<String, Integer>> pWordCount
= kvpCollection.apply(Sum.integersPerKey());

这时候就能得到
KV[cat, 3]
KV[dog, 2]
KV[panda,1]
的这么1个分组+合并的结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值