Spark使用过滤条件Scala在另一个RDD上迭代RDD
我想用一些附加的过滤条件迭代一个大RDD和一个小RDD。下面的代码工作正常,但进程仅使用驱动程序运行,而不是分布在节点上。那么,请建议其他方法Spark使用过滤条件Scala在另一个RDD上迭代RDD,scala,apache-spark,spark-streaming,rdd,mapr,Scala,Apache Spark,Spark Streaming,Rdd,Mapr,我想用一些附加的过滤条件迭代一个大RDD和一个小RDD。下面的代码工作正常,但进程仅使用驱动程序运行,而不是分布在节点上。那么,请建议其他方法 val cross = titlesRDD.cartesian(brRDD).cache() val matching = cross.filter{ case( x, br) => ((br._1 == "0") && (((br._2 ==((x._4))) && ((br._3 ex
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==""))
}
谢谢,
madhu您可能不想缓存
交叉。我相信,不缓存它会让笛卡尔积根据过滤器的需要“在运行中”发生,而不是实例化内存中笛卡尔积可能产生的大量组合
此外,在使用标题RDD进行笛卡尔积之前,您可以执行brRDD.filter(u.\u 1==“0”)
,例如
val cross = titlesRDD.cartesian(brRRD.filter(_._1 == "0"))
然后适当修改用于创建匹配的过滤器。小RDD有多大?你能把它改成广播变量吗?是的,我试过用广播变量。。相同的性能..:(考虑使用迭代和MapPartitions方法,如下面的URL[link]()对于初学者,您可以提供关于输入数据和/或示例输入类型的信息吗?这两个数据集有多大?另外,为什么您认为该进程只使用驱动程序运行?