基于公共密钥分析数据的简单方法

G B*_*G B 2 google-cloud-dataflow

处理映射到特定键的所有记录并输出该数据的多个记录的最简单方法是什么.

例如(合成示例),假设我的密钥是日期,并且值是具有测量温度的日内时间戳.我想在一天内将温度分类为高/平均/低(再次,低于/高于平均值1 stddev).

输出将是原始温度及其新分类.

使用Combine.PerKey(CombineFn),每个键只允许使用#extractOutput()方法输出一个输出.

谢谢

Fra*_*ces 5

CombineFns被限制为单个输出值,因为这允许系统进行额外的并行化:分别组合值的不同子集,然后将它们的中间结果组合成任意树减少模式,直到为每个键生成单个结果值.

如果你的每个键的值不适合内存(因此你不能使用Jeremy建议的GroupByKey-ParDo模式),但计算的统计数据确实适合内存,你也可以这样做:(1)​​使用组合. perKey()计算每天的统计数据(2)使用View.asIterable()将它们转换为PCollectionViews.(3)使用ParDo重新处理原始输入,将Parst作为侧输入(4)在ParDo的DoFn中,让startBundle()获取侧输入并构建内存数据结构映射天数到可以使用的统计数据在processElement中进行查找.