Apache Beam Combine vs GroupByKey


0

所以,我面临着一个经典的问题,为无限流提取时间框架的toppers,

假设sites+hits元组输入:

目标是在每1小时的时间内输出超过总点击量1%的网站。

首先,按 key求和:

备选方案:

1) 集团+帕尔多:

2) 分组 key+组合 key

虽然 union收割机选项(#2)似乎更合适,

10倍

1 答案


0

你可以通过侧面输入来实现。例如,您可以这样做(Python中的代码,但Java的答案是相似的):


input_data = .... # ("aaa.com", 1001), ("bbb.com", 21), ("aaa.com", 1002), ("ccc.com", 3001), ("bbb.com", 22) ....

total_per_key = input_data | beam.CombinePerKey(sum)

global_sum_per_window = beam.pvalue.AsSingleton(
input_data
| beam.Values()
| beam.CombineGlobally(sum).without_defaults())

def find_more_than_1pct(elem, global_sum):
key, value = elem
if value > global_sum * 0.01:
yield elem

over_1_pct_keys = total_per_key | beam.FlatMap(find_more_than_1pct)

在这种情况下,全局“每个窗口”集合的每个窗口都有一个值,而“每个窗口”的“每个关 key点总数”将有一个值。

如果行得通,请告诉我!


我来回答

写文章

提问题

面试题