Apache Beam - среднее агрегирование для каждого ключа в коллекции PCollection

У меня есть коллекция PCollection, которая состоит из столбца идентификатора и семи столбцов значений. Для каждого идентификатора есть несколько строк.

Я хотел бы вычислить среднее значение семи столбцов для каждого уникального идентификатора.

Есть ли способ добиться этого без программного прохождения каждого элемента и создания пары ключ / значение для каждого элемента?


person mgr    schedule 13.09.2018    source источник


Ответы (1)


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))

Извините за неприятную остроту. Надеюсь, это поможет.

person Pablo    schedule 13.09.2018