数据流上的Apache Flink随机异常值选择

时间:2018-03-12 15:18:08

标签: machine-learning apache-kafka apache-flink flink-streaming flinkml

我正在尝试使用Apache Flink ML包的StochasticOutlierSelection模型。

我无法弄清楚如何将它与Kafka一起用作数据源,我知道它需要一个DataSet而不是DataStream,但我似乎无法将我的Kafka DataStream窗口化为DataSet。

有没有办法可以将我的流视为一系列小型DataSet。例如,有没有办法说流中每10个与模式匹配的元素(按元素唯一ID滑动窗口)将它们视为固定大小的DataSet并检测此固定大小数据集中的任何异常值?

我想要创建的场景是:

数据源 - > Kafka主题1 - > Flink预处理 - > Kafka主题2 - > Flink Groups by ID - >群体异常值检测

我已经有了预处理的工作实现,我希望Flink能够满足我的要求吗?

1 个答案:

答案 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)
      }
    }