在 Spark 1.6 中StreamingContext
我可以使用函数reduceByKeyAndWindow
events
.mapToPair(x-> new Tuple2<String,MyPojo>(x.getID(),x))
.reduceByKeyAndWindow((a, b) ->
a.getQuality() > b.getQuality() ? a : b
, Durations.seconds(properties.getWindowLenght()),
Durations.seconds(properties.getSlidingWindow()))
.map(y->y._2);
现在我试图用 spark 2.0.2 和 Dataframes 重现这个逻辑。我能够重现丢失的功能 reduceByKey 但没有窗口
events
.groupByKey(x-> x.getID() ,Encoders.STRING())
.reduceGroups((a,b)-> a.getQuality()>=b.getQuality() ? a : b)
.map(x->x._2, Encoders.bean(MyPojo.class))
我能够用groupBy
events
.groupBy(functions.window(col("timeStamp"), "10 minutes", "5 minutes"),col("id"))
.max("quality")
.join(events, "id");
当我使用 groupBy 时,我只得到了 15 列中的两列,所以我试图通过 join 将它们取回,但后来我得到了 excpetion:join between two streaming DataFrames/Datasets is not supported;
我有什么办法可以重现reduceByKeyAndWindow
spark 2 中的逻辑吗?