Да, Join
- это служебный класс, который помогает с такими объединениями, как ваш.Это обертка вокруг CoGropByKey
, см. соответствующий раздел в документации.Реализация этого довольно короткая .Его тесты также могут иметь полезные примеры.
Проблема в вашем случае, вероятно, вызвана тем, как вы выбираете ключи.
KeyT
int KV<KeyT,V1>
в библиотеке Join
представляет ключ, который вы используете для сопоставления записей, она содержит все поля объединения.Так что в вашем случае вам, вероятно, потребуется назначить ключи примерно так (псевдокод):
pCollection1:
Key Value
(3,4) (1,2,3,4)
(7,8) (5,6,7,8)
(5,4) (1,2,5,4)
pCollection2:
Key Value
(3,4) (3,4,9,10)
И то, что произойдет при объединении, будет выглядеть примерно так (псевдокод):
joinResultPCollection:
Key Value
(3,4) (1,2,3,4),(3,4,9,10)
(7,8) (5,6,7,8),nullValue
(5,4) (1,2,5,4),nullValue
Таким образом, вам, вероятно, потребуется добавить еще одно преобразование после объединения, чтобы фактически объединить левую и правую стороны в объединенную строку.
Поскольку у вас есть CSV, вы, вероятно, могли бы использовать в качестве ключей фактические строки, такие как "3,4"
(и ценности).Или вы можете использовать Lists<>
или ваши собственные типы строк.
Например, это именно то, что Реализация Beam SQL Join делает.