Apache flink 如何计算Apache Flink在给定时间窗口内处理的记录数

Apache flink 如何计算Apache Flink在给定时间窗口内处理的记录数,apache-flink,flink-streaming,Apache Flink,Flink Streaming,在flink中定义时间窗口后,如下所示: val lines = socket.timeWindowAll(Time.seconds(5)) 如何计算5秒特定窗口中的记录数?您可以尝试此方法。可能会为您提供解决方案。 val text = senv.socketTextStream("localhost", 9999) val counts = text.map {(m: String) => (m.split(",")(0), 1) } .keyBy(0) .timeW

在flink中定义时间窗口后,如下所示:

val lines = socket.timeWindowAll(Time.seconds(5))

如何计算5秒特定窗口中的记录数?

您可以尝试此方法。可能会为您提供解决方案。

val text = senv.socketTextStream("localhost", 9999)
val counts = text.map {(m: String) => (m.split(",")(0), 1) }
    .keyBy(0)
    .timeWindow(Time.seconds(10), Time.seconds(5))
    .sum(1)
counts.print
senv.execute("ProcessingTime processing example")

执行计数聚合的最有效方法是
ReduceFunction
。但是,
reduce
具有输入和输出类型必须相同的限制。因此,在应用窗口之前,必须将输入转换为
Int

val socket: DataStream[(String)] = ???

val cnts: DataStream[Int] = socket
  .map(_ => 1)                    // convert to 1
  .timeWindowAll(Time.seconds(5)) // group into 5 second windows
  .reduce( (x, y) => x + y)       // sum 1s to count

我尝试了这个,但是map()函数map(=>1)导致了一个错误“找不到org.apache.flink.api.common.typeinfo.TypeInformation[Int]类型的证据参数的隐式值”。您是否
导入了org.apache.flink.streaming.api.scala.
?对于我的数据集,它是JSON格式的,因此我们无法使用“,”来拆分它。这是我的理解。如果我错了,请澄清我的疑虑。