Scala for Spark中两个HashMap(HashMap <integer,hashset <integer>&gt;)RDD的交集

时间:2017-11-12 07:26:36

标签: scala apache-spark hashmap intersection hashset

我正在使用Scala在独立计算机(具有Windows 10的PC)上使用Spark进行编程。我是一个新手,没有scala和spark编程经验。所以我非常感谢你的帮助。

问题:

我有一个HashMap,hMap1,其值为整数条目的HashSets(HashMap&gt;)。然后,我将其值(即,许多HashSet值)存储在RDD中。代码如下

val rdd1 = sc.parallelize(Seq(hMap1.values()))

现在我有另一个相同类型的HashMap,即hMap2,即HashMap&gt;。它的值也存储在RDD中

val rdd2 = sc.parallelize(Seq(hMap2.values()))

我想知道如何将hMap1和hMap2的值相交

例如:

输入:

rdd1 = [2, 3], [1, 109], [88, 17]

中的数据

rdd2 = [2, 3], [1, 109], [5,45]

中的数据

输出

所以输出= [2, 3], [1, 109]

1 个答案:

答案 0 :(得分:0)

问题陈述

我对您的问题的理解如下:

  

鉴于两个类型为RDD[Set[Integer]]的RDD,如何生成RDD个共同记录。

示例数据

生成的两个RDD
val rdd1 = sc.parallelize(Seq(Set(2, 3), Set(1, 109), Set(88, 17)))
val rdd2 = sc.parallelize(Seq(Set(2, 3), Set(1, 109), Set(5, 45)))

可能的解决方案

如果我对问题陈述的理解是正确的,那么你可以使用rdd1.intersection(rdd2) ,如果你的RDD是我认为的那样。这就是我在Spark 2.2.0上使用spark-shell尝试的内容:

rdd1.intersection(rdd2).collect

产生了输出:

Array(Set(2, 3), Set(1, 109))

这很有效,因为Spark可以比较Set[Integer]类型的元素,但请注意,除非您定义Set[MyObject] MyObject,否则这对于任何对象var newBackButton = UIBarButtonItem(image: UIImage(named: "back"), style: .plain, target: self, action: #selector(self.back)) navigationItem?.leftBarButtonItem = newBackButton 都不通用。