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

Google cloud dataflow 基于公共密钥的简单数据分析方法,google-cloud-dataflow,Google Cloud Dataflow,处理映射到特定键的所有记录并为该数据输出多个记录的最简单方法是什么 例如(一个合成示例),假设我的键是一个日期,并且值是带有测量温度的日内时间戳。我想将一天内的温度分为高/平均/低(同样,低于/高于平均温度的1 stddev) 输出将是具有新分类的原始温度 使用Combine.PerKey(CombineFn)只允许使用#extractOutput()方法对每个键进行一次输出 谢谢为什么不在ParDo之后使用GroupByKey操作呢?GroupBy将使用给定的键对所有值进行分组。然后,应用Pa

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

例如(一个合成示例),假设我的键是一个日期,并且值是带有测量温度的日内时间戳。我想将一天内的温度分为高/平均/低(同样,低于/高于平均温度的1 stddev)

输出将是具有新分类的原始温度

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


谢谢

为什么不在ParDo之后使用GroupByKey操作呢?GroupBy将使用给定的键对所有值进行分组。然后,应用ParDo可以使用给定的键处理所有值。使用ParDo可以为给定的键输出多个值


在您的温度示例中,GroupByKey的输出将是KV的PCollection(我假设您使用一个整数来表示日期和温度的浮点值)。然后,您可以应用ParDo来处理每个KV。对于每千伏,您可以迭代表示温度的浮子,并计算高/平均/低温度。然后,您可以使用这些统计数据对每个温度读数进行分类,并输出表示分类的记录。这是假设每天的测量数量足够小,可以很容易地放入内存中

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

如果每个键的值不适合内存(因此您不能使用Jeremy建议的GroupByKey ParDo模式),但计算的统计数据确实适合内存,您也可以这样做: (1) 使用Combine.perKey()计算每天的统计数据 (2) 使用View.asIterable()将这些视图转换为PCollectionView。 (3) 使用ParDo重新处理原始输入,ParDo将统计信息作为边输入
(4) 在ParDo的DoFn中,让startBundle()接受辅助输入,并建立一个内存中的数据结构,将天数映射到统计数据,可用于在processElement中进行查找。

谢谢,这就是我最后要做的,因为我还想将统计数据作为一个单独的输出。