Apache Spark:updateStateByKey +多个窗口

时间:2015-05-15 15:17:35

标签: apache-spark spark-streaming

我需要"字数"传入流,将其分成几个窗口并独立保存。

JavaDStream<String> input = streamingContext.textFileStream("source_dir")
// split into (word,1) pairs (assumed more complex transformation in real life)
JavaPairDStream<String, Integer> wordCountStream = input
            .flatMapToPair(SPLIT_FUNCTION);
// have half-hour interval and one day
for(int minuteWindowSize : new Integer[]{30,1440})
{
   // assumed, that reduceFunc makes a+b, inverse: a-b
   JavaPairDStream<String, Integer> windowReduced = wordCountStream.reduceByKeyAndWindow(reduceFunc, inverseReduceFunc, Durations.minutes(minuteWindowSize), Durations.minutes(BATCH_PERIOD));
   windowReduced.foreachRDD(SAVE_FUNCTION);
}

在Spark Web GUI中,我看到两个&#34;巨大的&#34;阶段:: flatMapToPair(假设,由于两个窗口),具有相同的执行时间和输入。

我的期望是,&#34;小&#34; :: flatMapToPair数据,自上次窗口计算以来到达,它共享&#34;共享&#34;在所有窗口内处理少量数据。

我觉得,应该使用:: updateStateByKey,在:: updateStateByKey和:: window上看到单独的例子,但不了解如何组合它们。

如何正确地在多个窗口上实现字数?

0 个答案:

没有答案