Я полагаю, что вы действительно можете использовать CoGroupBykey:
Применяя Руководство по программированию Apache Beam * Пример телефонов и электронных писем для вашего случая, вы можете попытаться передать CoGroupByKey с помощью PCollection of PC'C, D, E', с ключами 'A, B' и PCollection 'F, G', также с 'A, B.'.
Чтобы сделать это немного яснее, элементы в каждой PCollection должныбыть кортежами, с их первым элементом клавишей 'A, B', а вторым значением 'C, D, E' или 'F, G':
PColl1 = PCollection(
('2,4', '1,2,5'),
('1,10', '4,4,9'),
...) # this is the PCollection of CDE's
PColl2 = PCollection(
('2,4', '30,3'),
('20,1', '2,1'),
...) # this is the PCollection of FG's
(запись PCollection находится здесьдля иллюстрации)
Тогда мы применили бы:
join = {'CDE': PColl1, 'FG': Pcoll2} | beam.CoGroupByKey()
Согласно руководству по программированию, результат должен быть:
PCollection(
('2,4', {
'CDE': ['1,2,5'],
'FG': ['30,3']
}
),
('1,10', {
'CDE': ['4,4,9']
}
),
('20,1', {
'FG': ['2,1']
}
),
...)
Если A и B принимают значение 2,4 более одного раза в одном файле, это не должно быть проблемой, у нас должно быть несколько значений в CDE или в FG.