Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud dataflow 基于python数据流中另一个PCollection的值筛选PCollection_Google Cloud Dataflow_Apache Beam - Fatal编程技术网

Google cloud dataflow 基于python数据流中另一个PCollection的值筛选PCollection

Google cloud dataflow 基于python数据流中另一个PCollection的值筛选PCollection,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,我有两个p-Collection,如下所示 P1=['1','2','4','5','6','7','8'] P2=[('1',(2,1,2)),('5',(1,0,9)),('9',(1,2,3)),('10',(1,0,0)), ('1',(1,1,1))] 我想使用dataflow python编写合并器,这样我的P2就会像下面那样被过滤 结果=[('1',(2,1,2)),('5',(1,0,9)),('1',(1,1,1))] 优化和快速的方法是什么?这是一种可能的解决方法: def

我有两个p-Collection,如下所示

P1=['1','2','4','5','6','7','8']

P2=[('1',(2,1,2)),('5',(1,0,9)),('9',(1,2,3)),('10',(1,0,0)), ('1',(1,1,1))]

我想使用dataflow python编写合并器,这样我的P2就会像下面那样被过滤

结果=[('1',(2,1,2)),('5',(1,0,9)),('1',(1,1,1))]


优化和快速的方法是什么?

这是一种可能的解决方法:

def extract_keys(row):
    for e in row[1]['p2']:
        yield (row[0], e)

p = beam.Pipeline(options=beam.pipeline.StandardOptions())
p1 = p | 'p1' >> beam.Create([[str(i), 1] for i in range(8)])
p2 = p | 'p2' >> beam.Create([('1',(2,1,2)), ('5', (1,0,9)), ('9', (1,2,3)), ('10', (1,0,0)), ('1',(1,1,1))])
p3 = ({'p1': p1, 'p2': p2} 
       |'Group all keys' >> beam.CoGroupByKey()
       | 'Filter' >> beam.Filter(lambda x: (len(x[1]['p2']) > 0 and len(x[1]['p1']) > 0))
       | 'Extract keys' >> beam.FlatMap(lambda x: extract_keys(x))
       | 'Save results' >>  beam.io.WriteToText('result.csv'))
其结果是:

('1', (2, 1, 2))
('1', (1, 1, 1))
('5', (1, 0, 9))
这里发生了什么:首先请注意,我必须使用与您略有不同的输入。我的
P1
就像
[[1',1],[2',1]…]
。因此,我们可以在使用键作为合并参考将PCollections混合为一个的操作中使用它(请注意,在此步骤中,PCollections位于
dict
中,因为这是
CoGroupByKey
的预期输入)

完成后,我们只需过滤掉不匹配的密钥。应用
extract_键
只是为了获得所需的预期输出


我建议您使用这些步骤,例如,您可以删除
p3
中的一些步骤,并查看每个操作的结果,以查看数据是如何转换的。此外,您还可以了解这些转换是如何工作的。

到目前为止您做了哪些尝试?有没有一套你正在考虑的方法!