我想用一些额外的过滤条件迭代一个带有小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==""))
}
谢谢, 马杜
答案 0 :(得分:2)
您可能不想缓存cross
。我认为,不缓存它会让过滤器需要的“蝇蛆”产品“在运行中”发生,而不是实例化由内存中的笛卡尔积产生的潜在大量组合。
此外,您可以在使用brRDD.filter(_._1 == "0")
执行笛卡尔积之前执行titlesRDD
,例如
val cross = titlesRDD.cartesian(brRRD.filter(_._1 == "0"))
然后适当修改用于创建matching
的过滤器。