Как получить один элемент из коллекции в Apache Beam - PullRequest
1 голос
/ 31 марта 2020

с учетом списка коллекций:

[{'id': '1', 'name': 'Tom', 'country': 'USA'}, {'id': '2', 'name': 'Oprah', 'country': 'USA'} ....]

Я хочу подсчитать количество случаев в каждой стране. Результат должен выглядеть примерно так:

{'США': 2, 'Тунис': 3, 'Франция': 1}

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Check beam.combiners.ToDict , который в результате выдает dict;

Пример:

import apache_beam as beam
from apache_beam.options.pipeline_options import PipelineOptions

p = beam.Pipeline(options=PipelineOptions()) 

(p  
| "create pcoll" >> beam.Create([{'id':'1','name':'Tom','country':'USA'},
                                                {'id':'2','name':'Oprah','country':'USA'},
                                                {'id':'2','name':'Oprah','country':'Italy'}])
| "map" >> beam.Map(lambda x: (x['country']))
| "count" >> beam.combiners.Count.PerElement()
| "toDict" >> beam.combiners.ToDict()
| "print" >> beam.Map(print)
) 

p.run()

# Result {'USA': 2, 'Italy': 1}
0 голосов
/ 31 марта 2020

Это похоже на пример подсчета слов. Вы можете найти реализацию в python здесь - https://beam.apache.org/get-started/wordcount-example/

...