将摘要RDD保留在内存中,并基于它过滤原始RDD

时间:2019-07-02 22:03:59

标签: scala apache-spark

是否有任何方法可以将大RDD的摘要存储为summaryRDD,因此可以以更少的精力完成大多数计算。基于这些计算,可以在summaryRDD中过滤大量记录,并且可以对原始RDD进行相同的过滤。

假设我们有一个非常大的RDD,称为largeRDD,其中包含图像。

我们可以将此RDD转换为较小的RDD,这是将bigRDD映射到每个图像的特征向量(SmallVector)。该特征向量可用于修剪记录。

我应该指出,由于要进行后续的类似操作,因此我们希望保留summaryRDD。但是我们不希望(实际上不能)将largeRDD保留在主内存中。

现在,问题在于,在对summaryRDD进行修剪之后,如何才能有效地从largeRDD(仅是过滤后的记录)中检索相应的记录?我猜想没有办法,因为大RDD应该每次都完整地计算。

val largeRDD: RDD[(Int, LargeObject)] = ???
val summaryRDD: RDD[(Int, SmallVector)] = largeRDD.map(_.toSmallVector).cache
val filtered: RDD[(Int, SmallVector)] = summaryRDD.filter(_.isWhatIWant)

0 个答案:

没有答案