【问题标题】:Apache Beam: How to continue the pipeline after Partition transform?Apache Beam:分区转换后如何继续管道?
【发布时间】:2020-05-22 07:57:23
【问题描述】:

我正在将 Apache Beam 与 Cloud Dataflow 结合使用。想象数百万种产品到达管道。经过一些步骤(过滤、映射等)后,我想按某个字段对数据进行分区。我尝试使用分区转换,我猜它分区正确。但是,我不知道如何进一步进行。这让我感到困惑:

我的目标是按某个字段对数据进行分区,并将所有这些数据写入不同的表。假设分区转换将数据切片为 18 个 PCollections,那么应该有 18 个文件。但是,分区转换返回 PCollectionList,我无法对其应用 TextIO 转换。我尝试迭代它并将 TextIO 转换应用于每个 PCollection,但它没有用。

分区转换后如何将所有部分写入文件?

谢谢,

【问题讨论】:

  • 你能添加一些代码并指出代码中的问题吗?

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


【解决方案1】:

用于PTransform Partition的函数需要输出元素需要去的列表的索引。遵循管道应该只是引用该输出。 python中的一个例子:

with beam.Pipeline() as p:
    even, odd = (p | "Create Numbers" >> Create(range(10))
                 | "Odd or Even" >> Partition(lambda n, partitions: n % 2, 2))
    # lambda x,y: which partition fn, number partitions
    # even would be when the fn outputs 0, odd when it outputs 1

    even | "even write" >> beam.io.textio.WriteToText('Output/Even')
    odd | "odd write" >> beam.io.textio.WriteToText('Output/Odd')

【讨论】:

  • 没有看到 java 标签。在这里你有一个Java example。几乎相同,但使用 .get()
猜你喜欢
  • 2019-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-25
  • 1970-01-01
  • 2018-11-05
  • 1970-01-01
相关资源
最近更新 更多