我正在尝试将部分函数传递给通过滑动窗口在 DStream 批处理中捕获的所有 RDD 的联合。假设我在离散为 1 秒批次的流上构建了一个超过 10 秒的窗口操作:
val ssc = new StreamingContext(new SparkConf(), Seconds(1))
val stream = ssc.socketStream(...)
val window = stream.window(Seconds(10))
我window
将有 K 个 RDD。我想collect(f: PartialFunction[T, U])
在所有 K 个这些 RDD 的联合上使用。++
我可以使用调用联合运算符foreachRDD
,但我想返回一个RDD
not aUnit
并避免副作用。
我正在寻找的是一个减速器
def reduce(f: (RDD[T], RDD[T]) ⇒ RDD[T]): RDD[T]
DStream
我可以像这样使用:
window.reduce(_ ++ _).transform(_.collect(myPartialFunc))
但这在 Spark Streaming API 中不可用。
有没有人有任何好的想法可以将流中捕获的 RDD 组合成单个 RDD,以便我可以传入部分函数?还是为了实现我自己的 RDD 减速器?也许这个功能会在随后的 Spark 版本中出现?