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

Apache flink 如何在Flink中对字符串数据流执行timeWindow()?,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我想在ApacheFlink中创建一个流数据的时间窗口。我的数据看起来有点像这样: 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进行操作,因此我

我想在ApacheFlink中创建一个流数据的时间窗口。我的数据看起来有点像这样:

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()。我可以根据卷号(第一列,例如Mokshda的52)设置关键帧

但很明显,弗林克并没有把我的数据作为一个列表来阅读。它将其作为字符串读取,因此,我得到以下异常:

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,(Int,String,Double)]
数据流[String]
转换为
数据流[(Int,String,Double)]
,转换数据类型并发出
元组

您还可以对非键控数据流应用
timeWindowAll
。但是,语义当然不同,AllWindow只能使用parallelism 1进行处理

Exception in thread "main" org.apache.flink.api.common.InvalidProgramException: Specifying keys via field positions is only valid for tuple data types. Type: String