我有两个csv文件-我想在数据流中进行完全连接
我读为PCollection的两个csv文件
csv1
列int Hash(char* key, int keyLength, int tableSize)
{
int i = 0;
int hashValue= 0;
for(i=0; i<keyLenth; i++)
hashValue += key[i];
return hashValue % tableSize;
}
csv2
列A | B | C | D | E
我需要基于键A | B | C | F | G
加入两个P集合,并得到如下所示的p集合
列A,B
试验1
A | B | C | D | E | F | G
这基本上就像是sql中的完全联接
答案 0 :(得分:0)
我相信您确实可以使用CoGroupBykey:
将Apache Beam Programming guide的电话和电子邮件示例应用于您的案例,您可以尝试使用PCollection为'C,D,E',键为'A,B'和PCollection为'PCollection的CoGroupByKey。 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中有多个值。