例如,我有很多单词,想要计算每个单词.问题是这些词是倾斜的.这意味着某些单词的频率非常高,但大多数其他单词的频率很低.在风暴中,我们可以使用以下方式来解决此问题.首先对流进行随机分组,在每个节点中计算窗口时间本地的单词,最后更新计入累积结果.从我的另一个问题,我知道Flink只支持键控流上的窗口,否则窗口操作将不是并行的.
我的问题是有没有一种很好的方法来解决Flink中这种扭曲的数据问题?
DataStream API当前不支持预聚合.原则上,可以为事件时间窗口添加类似组合器的特征.国际海事组织,这将是一个非常有价值的补充,但还没有完成.
但是,您可以自己实现此功能.DataStream API提供低级操作员界面,类似于Storm Bolts.接口被调用OneInputStreamOperator
.此操作员类型可让您完全控制.实际上,内置运算符(如Window运算符)也基于此类.
A OneInputStreamOperator
可以应用如下:
DataStreaminStream = ... DataStream outStream = inStream .transform("my op", BasicTypeInfo.STRING_TYPE_INFO, new MyOISO());