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

时间:2018-09-13 13:10:52

标签: google-cloud-dataflow apache-beam dataflow

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

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

是否有一种方法可以实现这一目标,而无需以编程方式遍历每个元素并为每个元素创建键/值对?

1 个答案:

答案 0 :(得分: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))

对不起,令人讨厌的单线飞机。希望对您有所帮助。