我想在Apache中创建一个流数据的时间窗口。我的数据看起来有点像这样:
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。我可以按号码(如第一栏)来键入。52代表Mokshda)。
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如何对字符串数据执行timeWindow,或者如何将这些数据转换为元组?
发布于 2016-04-18 14:13:24
您可以使用一个将字符串解析为其组件、转换数据类型和发射一个DataStream[String]的MapFunction[String, (Int, String, Double)]将一个MapFunction[String, (Int, String, Double)]转换为一个Tuple。
您还可以在无键数据流上应用timeWindowAll。然而,语义当然是不同的,AllWindow只能通过并行处理1。
https://stackoverflow.com/questions/36696311
复制相似问题