ApacheBeamCombine.perKey操作为同一键产生多个输出的解决办法是什么?
创始人
2024-09-05 11:00:58
0

Apache Beam的Combine操作是一种将多个输入元素聚合并生成单个输出元素的操作。在Combine操作期间,可以使用Combine.perKey将输入数据按键分组并对每个组进行聚合。使用Combine.perKey时,有时可能会出现一些键产生多个输出的情况,这可能会影响应用程序的结果。

要解决这个问题,可以使用一个输出转换器将每个键的输出转换为一个单独的元组列表,并将其合并为一个输出元组。这样,每个键只会生成一个输出元组,其中包含其所有聚合输出。

以下是一个示例,在其中,我们使用输出转换器将每个键的输出转换为一个元组列表,并使用Flatten操作将所有元组列表合并为一个输出元组:

import apache_beam as beam
 
class ConvertToList(beam.DoFn):
    def process(self, element):
        key, value = element
        yield (key, [value])
 
p = beam.Pipeline()
 
input_data = p | "Create input" >> beam.Create([
    ("key1", 1),
    ("key1", 2),
    ("key2", 3),
    ("key3", 4),
    ("key3", 5),
])
 
transformed_data = input_data | "Per-key count" >> beam.CombinePerKey(sum)
 
output = transformed_data | "Convert to list" >> beam.ParDo(ConvertToList())
grouped_output = output | "Group elements" >> beam.GroupByKey()
final_output = grouped_output | "Flatten output" >> beam.Map(lambda x: (x[0], sum(x[1], [])))
 
final_output | "Print output" >> beam.Map(print)
 
p.run()

在上面的代码中,我们使用ConvertToList类,将每个键的输出转换为一个元素列表。然后,我们使用GroupByKey将所有具有相同键的元素组合在一起,并使用Flatten操作将列表连接为单个输出元素。这样,我们可以确保每个键只会产生一个输出元素。

输出: ('key1', [1, 2]) ('key2',[3]) ('key3',[4, 5])

相关内容

热门资讯

普及透视!hhpoker免费透... 普及透视!hhpoker免费透视脚本,wpk透视怎么安装,模块教程(有挂秘诀)-哔哩哔哩所有人都在同...
关于透视!wejoker手机版... 关于透视!wejoker手机版透视脚本,拱趴游戏破解器,技法教程(有挂技术)-哔哩哔哩关于透视!we...
关于透视!wpk安卓下载辅助,... 关于透视!wpk安卓下载辅助,sohoo竞技联盟辅助器,模板教程(有挂技巧)-哔哩哔哩sohoo竞技...
解迷透视!hhpkoer辅助挂... 解迷透视!hhpkoer辅助挂是真的吗,wepoker透视底牌脚本,策略教程(有挂方针)-哔哩哔哩1...
解谜透视!aapoker怎么选... 解谜透视!aapoker怎么选牌,德普辅助器怎么用,技法教程(有挂解惑)-哔哩哔哩1、德普辅助器怎么...
分享透视!wepoker如何设... 分享透视!wepoker如何设置透视,wepoker免费透视,攻略教程(有挂秘笈)-哔哩哔哩1、we...
有挂透视!wpk透视是真的假的... 有挂透视!wpk透视是真的假的,菠萝辅助器免费版的特点,烘培教程(有挂细节)-哔哩哔哩1、进入到菠萝...
教你透视!pokemmo辅助工... 教你透视!pokemmo辅助工具,wepoker有辅助器吗,窍要教程(真的有挂)-哔哩哔哩1、wep...
解谜透视!wepokerplu... 解谜透视!wepokerplus透视脚本免费,hhpoker辅助器,课程教程(有挂技巧)-哔哩哔哩1...
揭露透视!哈糖大菠萝攻略,hh... 揭露透视!哈糖大菠萝攻略,hhpoker是内部控制吗,教材教程(揭秘有挂)-哔哩哔哩1、操作简单,无...