在数据流python中联接两个csv数据

时间:2018-11-26 11:56:06

标签: python google-cloud-dataflow apache-beam

我有两个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中的完全联接

1 个答案:

答案 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中有多个值。