Spark使用过滤条件Scala迭代另一个RDD上的RDD

时间:2015-08-04 08:59:47

标签: scala apache-spark spark-streaming rdd mapr

我想用一些额外的过滤条件迭代一个带有小RDD的BIG RDD。下面的代码工作正常,但该过程仅在驱动程序和不在节点之间传播时运行。那么请建议其他方法吗?

val cross = titlesRDD.cartesian(brRDD).cache()
 val matching = cross.filter{ case( x, br) => 
    ((br._1 == "0") && 
   (((br._2 ==((x._4))) &&
    ((br._3 exists (x._5)) || ((br._3).head=="")) 
}

谢谢, 马杜

1 个答案:

答案 0 :(得分:2)

您可能不想缓存cross。我认为,不缓存它会让过滤器需要的“蝇蛆”产品“在运行中”发生,而不是实例化由内存中的笛卡尔积产生的潜在大量组合。

此外,您可以在使用brRDD.filter(_._1 == "0")执行笛卡尔积之前执行titlesRDD,例如

val cross = titlesRDD.cartesian(brRRD.filter(_._1 == "0"))

然后适当修改用于创建matching的过滤器。