我将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)
}
答案 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未完成,因为这不是"发布就绪"码。但它是可用的。