Соединение двух данных CSV в питоне потока данных - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть два файла CSV - я хочу сделать полное объединение в потоке данных

два файла CSV, которые я читаю как PCollection

CSV1

столбцы A | B | C | D | E

csv2

столбцы A | B | C | F | G

Мне нужно объединить два набора P на основе ключа A,B и получить результирующий набор p, как показано ниже

колонки A | B | C | D | E | F | G

Пробная версия 1

{'left': P_collection_1, 'right': P_collection_2}
            | ' Combine' >> beam.CoGroupByKey()
            | ' ExtractValues' >> beam.Values()

Это в основном похоже на полное объединение в sql

1 Ответ

0 голосов
/ 28 ноября 2018

Я полагаю, что вы действительно можете использовать 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...