首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Flink中对字符串timeWindow()执行DataStream?

如何在Flink中对字符串timeWindow()执行DataStream?
EN

Stack Overflow用户
提问于 2016-04-18 14:05:45
回答 1查看 1.1K关注 0票数 4

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

代码语言:javascript
复制
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)。

代码语言:javascript
复制
val windowedStream = stockStream
                        .keyBy(0)
                        .timeWindow(Time.seconds(20))
                        .sum(2)

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

代码语言:javascript
复制
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,或者如何将这些数据转换为元组?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-18 14:13:24

您可以使用一个将字符串解析为其组件、转换数据类型和发射一个DataStream[String]MapFunction[String, (Int, String, Double)]将一个MapFunction[String, (Int, String, Double)]转换为一个Tuple

您还可以在无键数据流上应用timeWindowAll。然而,语义当然是不同的,AllWindow只能通过并行处理1。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36696311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档