我正在使用Scala在独立计算机(具有Windows 10的PC)上使用Spark进行编程。我是一个新手,没有scala和spark编程经验。所以我非常感谢你的帮助。
问题:
我有一个HashMap,hMap1,其值为整数条目的HashSets(HashMap>)。然后,我将其值(即,许多HashSet值)存储在RDD中。代码如下
val rdd1 = sc.parallelize(Seq(hMap1.values()))
现在我有另一个相同类型的HashMap,即hMap2,即HashMap>。它的值也存储在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]
答案 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
都不通用。