【问题标题】:how to filter () a pairRDD according to two conditions如何根据两个条件过滤()一个pairRDD
【发布时间】:2016-06-11 20:17:36
【问题描述】:

如果我有 2 个过滤条件,我如何过滤我的对 RDD,一个用于测试密钥,另一个用于测试值(想要代码部分)bcz 我使用了这部分,但它没有可悲地工作

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

【问题讨论】:

  • 什么不起作用?你在处理什么类型的?我们需要更多关于您尝试提供帮助的详细信息。
  • 我有一个pairRDD,它可能包含相同键的不同值,或者重复相同的元组,我只想保留重复的元组
  • eg.如果我的 rdd 包含{(1,white),(1,black),(2,red),(2,red)} 那么我想要保留的只是 {(2,红色),(2,红色)}
  • 你的RDD 是一个元组序列?
  • 它应该只包含像这样的元组(并且每个键都是重复的)有时具有相同的值,有时不是

标签: apache-spark keyvaluepair


【解决方案1】:

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

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.")}

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

【讨论】:

  • 但我猜不出会出现哪些项目
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-03
  • 1970-01-01
  • 1970-01-01
  • 2018-01-09
  • 2021-01-27
  • 1970-01-01
相关资源
最近更新 更多