我正在尝试使用Apache Flink ML包的StochasticOutlierSelection模型。
我无法弄清楚如何将它与Kafka一起用作数据源,我知道它需要一个DataSet而不是DataStream,但我似乎无法将我的Kafka DataStream窗口化为DataSet。
有没有办法可以将我的流视为一系列小型DataSet。例如,有没有办法说流中每10个与模式匹配的元素(按元素唯一ID滑动窗口)将它们视为固定大小的DataSet并检测此固定大小数据集中的任何异常值?
我想要创建的场景是:
数据源 - > Kafka主题1 - > Flink预处理 - > Kafka主题2 - > Flink Groups by ID - >群体异常值检测
我已经有了预处理的工作实现,我希望Flink能够满足我的要求吗?
答案 0 :(得分:1)
我想您可以创建一个基于计数的全局窗口,并使用ExecutionEnvironment获取数据集。类似以下内容可能会起作用(getResult将返回一个DataSet):
stream.
keyBy(...).
window(GlobalWindows.create).
trigger(CountTrigger.of(10)).
aggregate(new MyAggregator()).
...
class MyAggregator extends AggregateFunction[..., ..., ...] {
var valueList: List[LabeledVector] = List[LabeledVector]()
override def createAccumulator(): MyAggregator = new MyAggregator()
override def add(value: .., accumulator: MyAggregator): ... = ...
override def merge(agg1: MyAggregator, agg2: MyAggregator): ... = ...
override def getResult(accumulator: MyAggregator): ... = {
ExecutionEnvironment.getExecutionEnvironment.fromCollection(valueList)
}
}