Scio:groupByKey在使用Pub / Sub作为集合源时不起作用

时间:2017-06-19 10:40:54

标签: apache-beam spotify-scio

我将WindowsWordCount example程序的源代码从文本文件更改为云Pub / Sub,如下所示。我将莎士比亚文件的数据发布到Pub / Sub,它确实被正确获取,但.groupByKey之后的转换似乎都没有。

sc.pubsubSubscription[String](psSubscription)
  .withFixedWindows(windowSize) // apply windowing logic
  .flatMap(_.split("[^a-zA-Z']+").filter(_.nonEmpty))
  .countByValue
  .withWindow[IntervalWindow]
  .swap
  .groupByKey
  .map {
    s =>
      println("\n\n\n\n\n\n\n This never prints \n\n\n\n\n")
      println(s)
  }

2 个答案:

答案 0 :(得分:3)

将输入从文本文件更改为PubSub PCollection" unbounded"。按键分组需要定义聚合触发器,否则石斑鱼将永远等待。它在数据流文档中提到: https://cloud.google.com/dataflow/model/group-by-key

  

注意:为了在无界PCollection上执行GroupByKey,需要非全局窗口或聚合触发器。这是因为有界GroupByKey必须等待收集某个密钥的所有数据;但是有了无限的集合,数据是无限的。窗口化和/或触发允许分组对无界数据流中的逻辑有限数据束进行操作。

     

如果将GroupByKey应用于无界PCollection而不设置非全局窗口策略,触发策略或两者,则在构造管道时,Dataflow将生成IllegalStateException错误。

不幸的是,在Apache的Python SDK中似乎不支持触发器(还),所以我不确定python中的解决方案是什么。

(见https://beam.apache.org/documentation/programming-guide/#triggers

答案 1 :(得分:1)

关于上面的Franz评论(如果StackOverflow允许我,我会特意回复他的评论!)我看到文档说触发没有实现......但他们也说实时数据库功能不可用,而我们当前的项目正在积极使用它们。他们只是新人。

请在此处查看触发器功能:https://github.com/apache/beam/blob/master/sdks/python/apache_beam/transforms/trigger.py

请注意,API未完成,因为这不是"发布就绪"码。但它是可用的。