Apache Beam - PCollection中每个键的平均聚合

问题描述 投票:0回答:1

我有一个PCollection,它由一个ID列和七个值列组成。每个ID有几行。

我想计算每个唯一ID的七列的平均值。

有没有办法实现这一点,而无需以编程方式遍历每个元素并为每个元素创建键/值对?

google-cloud-dataflow apache-beam dataflow
1个回答
0
投票
table_pcoll = ....

def per_column_average(rows, ignore_elms=[ID_INDEX]):
  return [sum([row[idx] if idx not in ignore_elms else 0 
               for row in rows])/len(row[0]) 
          for idx, _ in enumerate(rows[0])]

keyed_averaged_elm = (table_pcoll 
                      | beam.Map(lambda x: (x[ID_INDEX], x))
                      | beam.GroupByKey()
                      | beam.Map(lambda x: (x[0], per_column_average(rows))

抱歉这个讨厌的单行。我希望有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.