Spark Streaming空RDD性能问题

时间:2016-04-20 14:58:20

标签: scala apache-spark spark-streaming

我使用Spark Streaming处理导入的数据。导入数据存储在DStream中。此外,我有CreationUpdate类,其中包含Foo个对象。

我想完成的任务之一是更改检测。 所以我加入2个rdds(一个保存处理的数据批,另一个保存当前的状态currentState最初为空。

val stream: DStream[Foo]
val currentState: RDD[Foo]

val changes = stream
    .transform { batch =>
        batch.leftouterJoin(currentState) {
            case(objectNew, Some(objectOld)) => Update(objectNew)
            case(objectNew, None) => Creation(objectNew)
        }
    }

currentState = currentState.fullOuterJoin(changes).map {
        case (Some(foo), None) => foo
        case (_, Some(change)) => change.foo
    }
}.cache()

之后我会过滤掉更新。

changes.filter(!_.isInstanceOf[Update])

我现在两次导入相同的数据。由于 state 最初为空,因此第一个导入的结果集由Creation个对象组成,而第二个导入的结果集仅导致Update个对象。因此第二个结果集changes为空。 在这种情况下,我注意到性能大幅下降。如果我省略过滤器,它可以正常工作。

我无法想象这是预期的行为,但也许这是Spark Computation Internals的一个问题。任何人都可以解释为什么会这样吗?

0 个答案:

没有答案