当前位置: 首页 > 知识库问答 >
问题:

如何在Flink中对字符串数据流执行timeWindow()?

冯卓
2023-03-14

我想在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}
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

如何对字符串数据执行时间窗口,或者如何将此数据转换为元组?

共有1个答案

景元忠
2023-03-14

您可以使用映射函数[String,(Int,String,Double)]数据流[String]转换为数据流[(Int,String,Double)],该函数将字符串解析为其组件,转换数据类型并发出元组

还可以在非键控数据流上应用TimeWindowAll。然而,语义当然是不同的,AllWindow只能用并行度1处理。

 类似资料:
  • 我正在尝试计算Flink中输入数据流(无窗口)的平均值 输入数据流来自套接字连接,形式为“键值”,如“x 5”

  • 问题内容: 在熊猫数据框中,如何应用一种excel left(’state’,2)只接受前两个字母。理想情况下,我也想学习如何在数据框中使用左,右和中间。因此,对于此特定示例,需要一个等效而不是一个“技巧”。 我想得到这个: 问题答案: 列中每个值的前两个字母: 最后的两个是。不知道您到底想要什么,但是您可以使用方法将任意函数应用于列:

  • 问题内容: 我需要在Java字符串之间执行Diffs。我希望能够使用原始的string和diff版本重建字符串。有人用Java完成吗?你使用什么图书馆? 问题答案: 这个库似乎可以解决问题:google-diff-match-patch。它可以根据差异创建补丁字符串,并允许重新应用补丁。

  • 我想对字符串执行子字符串操作。我有字符串<代码> 我尝试了finame=mainname。子字符串(0,mainname.lastIndexOf(“.”) 但我得到了<代码>

  • 问题内容: 我想获取一串字符串并将其转换为单词对流。例如: 我有: 我想要:。 这几乎与Zipping相同,如使用带有Lambda的JDK8的Zipping流中概述的那样(java.util.stream.Streams.zip) 但是,这会产生: 以下代码有效,但显然是错误的方法(不是线程安全的等): 问题答案: 如果你: 不喜欢使用流中所有字符串创建列表的想法 不想使用外部库 喜欢弄脏你的手