Apache Spark计算和切片有什么区别?

时间:2015-10-19 14:33:24

标签: scala apache-spark

我试图在DStream上进行单元测试。

我使用可变队列ssc.queueStream(red)

将数据放入我的流中

我将ManualClock设置为0 启动我的流媒体上下文 将我的ManualClock推进到batchDuration milis

当我在做

stream.slice(Time(0), Time(clock.getTimeMillis())).map(_.collect().toList)

我得到了一个结果。

当我做的时候

for (time <- 0L to stream.slideDuration.milliseconds + 10) {
      println("time "+ time + " " +stream.compute(Time(time)).map(_.collect().toList))      
    }

它们都不包含stream.compute(Time(clock.getTimeMillis()))

的结果事件

那么在不考虑参数差异的情况下,这两个函数之间的区别是什么?

2 个答案:

答案 0 :(得分:1)

只有在滑动窗口中提供的时间是正确的时间时,计算才会返回RDD,即零时间+幻灯片持续时间的倍数。

切片会将滑动持续时间的从时间和时间对齐,并计算每个时间。

答案 1 :(得分:0)

在幻灯片中,您提供时间间隔和时间间隔,只要它有效我们生成Seq [时间]

def to(that: Time, interval: Duration): Seq[Time] = {
(this.milliseconds) to (that.milliseconds) by (interval.milliseconds) map (new Time(_))

}

然后我们&#34;计算&#34;对于每个Seq [时间]实例

 alignedFromTime.to(alignedToTime, slideDuration).flatMap { time =>
  if (time >= zeroTime) getOrCompute(time) else None
}

与计算相反,我们只计算我们通过计算方法的时间实例...