【问题标题】:Apache beam python pipeline doesnt proceed after groupbykey()Apache Beam python 管道在 groupbykey() 之后没有继续
【发布时间】:2019-02-12 04:52:08
【问题描述】:

我在管道中执行 GroupByKey,键是字符串,值是字典。我想对它们进行分组并对它们进行处理。 如果我删除 GroupByKey,我可以进入下一步,但不能使用它。

(parseout_interim | beam.Map(lambda row: (row['prefix'] + row['report_id'], row))
                                                # | beam.GroupByKey()
                                                | beam.ParDo(ParseSegmentsDoFn()).with_outputs(ParseSegmentsDoFn.OUTPUT_TAG_TRADELINE,
                                                                                              main = 'parseout'))

如果我评论 GroupByKey,数据到达下一步。

我完全错过了什么吗?

另外,在旁注中 - 是否建议不要在 ParDo 内旋转管道?还是完全没问题?如果没问题,我就不用使用 groupbykey 了

【问题讨论】:

  • 我正在从 PubSub 阅读,这就是 groupbykey 不起作用的原因。如果我没记错的话,它正在采取无限的 pcollection 并且永远等待。我引入了时间窗,现在它可以按预期工作了。
  • 我很高兴你明白了这一点。我发布了一个小解释。如果我应该提供更多背景信息,请告诉我。

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


【解决方案1】:

正如您在评论中暗示的那样,这必须是流式传输管道。

考虑流式传输管道不断接收事件。当您想要在该管道中分组 事件时,系统需要知道在对事件进行分组时它应该等待多长时间进入。这有意义吗?

因此,您需要为管道设置窗口和触发策略,否则它将永远等待,以对流中的所有元素进行分组。

【讨论】:

  • 只是为了添加一个可以帮助其他用户的好读物,可以参考关于Bounded and Unbounded PCollections的Dataflow文档,尽管已被弃用,但仍然可以很好地理解一些流概念。只关注通用概念(以及如何使用窗口和触发器处理无限数据源),而忽略特定于实现的部分,这些部分可能在最新的 Apache Beam 版本中发生了变化。
  • 另外@Nichole,如果它有助于您向社区展示这篇文章已解决并且可能对其他用户也有帮助,请随时接受(并投票)答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-10
  • 1970-01-01
相关资源
最近更新 更多