- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图增强显示流用法的 Flink 示例。我的目标是使用窗口功能(参见 window
函数调用)。我假设下面的代码输出流的最后 3 个数字的总和。(由于 ubuntu 上的 nc -lk 9999
打开了流)实际上,输出汇总了所有输入的数字。切换到时间窗口会产生相同的结果,即不产生窗口。
这是一个错误吗? (使用的版本:github上最新的master)
object SocketTextStreamWordCount {
def main(args: Array[String]) {
val hostName = args(0)
val port = args(1).toInt
val env = StreamExecutionEnvironment.getExecutionEnvironment
// Create streams for names and ages by mapping the inputs to the corresponding objects
val text = env.socketTextStream(hostName, port)
val currentMap = text.flatMap { (x:String) => x.toLowerCase.split("\\W+") }
.filter { (x:String) => x.nonEmpty }
.window(Count.of(3)).every(Time.of(1, TimeUnit.SECONDS))
// .window(Time.of(5, TimeUnit.SECONDS)).every(Time.of(1, TimeUnit.SECONDS))
.map { (x:String) => ("not used; just to have a tuple for the sum", x.toInt) }
val numberOfItems = currentMap.count
numberOfItems print
val counts = currentMap.sum( 1 )
counts print
env.execute("Scala SocketTextStreamWordCount Example")
}
}
最佳答案
问题似乎是存在从 WindowedDataStream
到 DataStream
的隐式转换。此隐式转换调用 WindowedDataStream
上的 flatten()
。
在您的情况下,代码会扩展为:
val currentMap = text.flatMap { (x:String) => x.toLowerCase.split("\\W+") }
.filter { (x:String) => x.nonEmpty }
.window(Count.of(3)).every(Time.of(1, TimeUnit.SECONDS))
.flatten()
.map { (x:String) => ("not used; just to have a tuple for the sum",x.toInt) }
flatten()
的作用类似于集合上的 flatMap()
。它采用可以看作集合集合 ([[a,b,c], [d,e,f]]
) 的窗口流,并将其转换为元素流: [a,b,c,d,e,f]
。
这意味着您的计数实际上仅对已加窗和“去窗”的原始流进行操作。这看起来好像根本没有窗口化过。
这是个问题,我会立即着手解决。 (我是 Flink 提交者之一。)您可以在此处跟踪进度:https://issues.apache.org/jira/browse/FLINK-2096
使用当前 API 的方法是这样的:
val currentMap = text.flatMap { (x:String) => x.toLowerCase.split("\\W+") }
.filter { (x:String) => x.nonEmpty }
.map { (x:String) => ("not used; just to have a tuple for the sum",x.toInt) }
.window(Count.of(3)).every(Time.of(1, TimeUnit.SECONDS))
WindowedDataStream
有一个 sum() 方法,因此不会隐式插入 flatten() 调用。不幸的是,count()
在 WindowedDataStream
上不可用,因此为此您必须手动将 1
字段添加到元组并计算这些。
关于apache-flink - 在 Flink 中,stream windowing 好像不行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30461809/
在引用此文档pressable docs之后,我将Pressable用于按钮 现在,我想向按钮添加波纹效果,但是它无法正常工作。 Button 如果按钮具有
在 C# 中,我想制作“智能”枚举,这在 Java 中是可能的,其中有更多信息附加到枚举值,而不仅仅是底层 int。我偶然发现了一个创建类(而不是枚举)的方案,如以下简单示例所示: public se
当执行 git stash 时,会创建 2 个提交。一个被 stash ref 引用并且有 2 个父提交。一位 parent 是我们 stash 地点的索引。另一方拥有我们 stash 的实际内容。
我是一名优秀的程序员,十分优秀!