如何根据两个条件过滤()一对pairRDD

时间:2016-06-11 08:11:18

标签: apache-spark keyvaluepair

如果我有两个条件用于过滤它,我怎么能过滤我的对RDD,一个用于测试密钥,另一个用于测试值(想要代码部分)bcz我使用了这部分并且它没有工作悲伤< / p>

JavaPairRDD filtering = pairRDD1.filter((x,y) -> (x._1.equals(y._1))&&(x._2.equals(y._2)))));

1 个答案:

答案 0 :(得分:0)

您不能使用常规过滤器,因为它一次检查一个项目。您必须将多个项目相互比较,并检查要保留的项目。这是一个只保留重复项目的例子:

val items = List(1, 2, 5, 6, 6, 7, 8, 10, 12, 13, 15, 16, 16, 19, 20)
val rdd = sc.parallelize(items)
// now create an RDD with all possible combinations of pairs
val mapped = rdd.map { case (x) => (x, 1)}
val reduced = mapped.reduceByKey{ case (x, y) => x + y }
val filtered = reduced.filter { case (item, count) => count > 1 }
// Now print out the results:
filtered.collect().foreach { case (item, count) =>
   println(s"Keeping $item because it occurred $count times.")}

它可能不是最适合这种情况的代码,但它应该让您对该方法有所了解。