{1,"kavita",26.16} 2> {131,"ni-6ren">
gpt4 book ai didi

apache-flink - 如何在 Flink 中对 String DataStream 执行 timeWindow()?

转载 作者:行者123 更新时间:2023-12-05 00:56:12 27 4
gpt4 key购买 nike

我想在 Apache Flink 中制作流数据的时间窗口。我的数据看起来有点像这样:

1> {52,"mokshda",84.85}
2> {1,"kavita",26.16}
2> {131,"nidhi",178.9}
3> {2,"poorvi",22.97}
4> {115,"saheba",110.41}

每 20 秒,我想要所有行的分数总和(最后一列,例如 Mokshda 的分数是 84.85)。 timeWindow() 函数在 KeyedStream 上运行,因此我必须 keyBy() 这个 DataStream。我可以按卷号键入它(第一列,例如 Mokshda 的 52)。
val windowedStream = stockStream
.keyBy(0)
.timeWindow(Time.seconds(20))
.sum(2)

但很明显,Flink 并没有将我的数据作为列表读取。它将它作为字符串读取,因此,我得到以下异常:
Exception in thread "main" org.apache.flink.api.common.InvalidProgramException: Specifying keys via field positions is only valid for tuple data types. Type: String

如何对 String 数据执行 timeWindow,或者如何将此数据转换为 Tuple?

最佳答案

您可以转换 DataStream[String]DataStream[(Int, String, Double)]使用 MapFunction[String, (Int, String, Double)]它将字符串解析为其组件,转换数据类型并发出 Tuple .

您也可以申请 timeWindowAll在非键控数据流上。然而,语义当然是不同的,一个 AllWindow 只能用并行度 1 处理。

关于apache-flink - 如何在 Flink 中对 String DataStream 执行 timeWindow()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36696311/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com