Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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
Python 3.x 什么是「|&引用;及&燃气轮机&燃气轮机&引用;在Apache Beam中是什么意思?_Python 3.x_Apache Beam - Fatal编程技术网

Python 3.x 什么是「|&引用;及&燃气轮机&燃气轮机&引用;在Apache Beam中是什么意思?

Python 3.x 什么是「|&引用;及&燃气轮机&燃气轮机&引用;在Apache Beam中是什么意思?,python-3.x,apache-beam,Python 3.x,Apache Beam,我在试着理解阿帕奇光束。在一个示例中,他们说talk about,下面的代码示例使用CoGroupByKey连接两个PCollection,然后是一个ParDo来使用结果。然后,代码使用标记查找并格式化每个集合中的数据。 我非常惊讶,因为我在任何时候都没有看到ParDo操作,所以我开始怀疑是否就是ParDo。代码如下所示: import apache_beam as beam from apache_beam.options.pipeline_options import PipelineOpt

我在试着理解阿帕奇光束。在一个示例中,他们说talk about
,下面的代码示例使用CoGroupByKey连接两个PCollection,然后是一个ParDo来使用结果。然后,代码使用标记查找并格式化每个集合中的数据。

我非常惊讶,因为我在任何时候都没有看到
ParDo
操作,所以我开始怀疑
是否就是
ParDo
。代码如下所示:

import apache_beam as beam
from apache_beam.options.pipeline_options import PipelineOptions

emails_list = [
    ('amy', 'amy@example.com'),
    ('carl', 'carl@example.com'),
    ('julia', 'julia@example.com'),
    ('carl', 'carl@email.com'),
]
phones_list = [
    ('amy', '111-222-3333'),
    ('james', '222-333-4444'),
    ('amy', '333-444-5555'),
    ('carl', '444-555-6666'),
]

pipeline_options = PipelineOptions()
with beam.Pipeline(options=pipeline_options) as p:
    emails = p | 'CreateEmails' >> beam.Create(emails_list)
    phones = p | 'CreatePhones' >> beam.Create(phones_list)
    results = ({'emails': emails, 'phones': phones} | beam.CoGroupByKey())
    
    def join_info(name_info):
        (name, info) = name_info
        return '%s; %s; %s' %\
      (name, sorted(info['emails']), sorted(info['phones']))

    contact_lines = results | beam.Map(join_info)

我确实注意到,
电子邮件
电话
都是在管道的开头读取的,所以我猜它们都是不同的
p集合
,对吗?但是
ParDo
在哪里执行?“|”和“>>”实际上是什么意思?我怎样才能看到这个的实际输出呢?如果
join_info
功能、
email_list
phone_list
是在DAG之外定义的,这有关系吗?

表示步骤之间的分离,这是(使用
p
作为
Pbegin
):
p | ReadFromText(..)ParDo(..)GroupByKey()

您也可以在
|
之前引用其他
p集合

read = p  | ReadFromText(..)
kvs = read | ParDo(..)
gbk = kvs | GroupByKey()
这相当于前面的管道:
p | ReadFromText(..)|ParDo(..)| GroupByKey()


>
用于
p转换
之间,以命名步骤:
p | ReadFromText(..)|“to key value”>>ParDo(..)| GroupByKey()

要添加到这一点,有一些教程可用于学习Beam,您可以查看Katas(适用于Java和Python)和/或通过创建一个新InstanceHanks@Iñigo,在Google Cloud中的
Dataflow>Notebook
下提供一些新教程。因此,如果我理解得很好,
ParDo
操作由
>
符号表示,而
|
表示对
PCollections
进行的不同转换,是不是?在您发布的示例中,是否需要使用
ParDo
ParDo
是否在管道中打开一个新分支?不,不,
>
只是一个可选的步骤名称。PARDO本身就是一种
p转换
。只是想澄清一下:
p |“可选名称”>>p转换
|
是一个分隔符。在该示例中,
Create
CoGroupByKey
(和
ParDo
FWIW)是
PTransforms
<代码>创建生成元素
CoGroupByKey
是一种聚合N
PCollection
的方法
ParDo
是一种在元素之间完成的常规操作(例如,平方一个数字、添加一个或任何函数)。我强烈建议通过Katas或Dataflow笔记本了解正确的概念。我还没有看过Katas(但它们是Beam正式发布的),但我第一手就知道Dataflow笔记本中有一些理论和基本概念。你可能也想看一下,也许可以从更简单的转换开始(我想说,
CoGroupByKey
是最难的转换之一)