[英]Intersection of Two HashMap (HashMap<Integer,HashSet<Integer>>) RDDs in Scala for Spark
我在Scala中工作,用于在独立计算机(具有Windows 10的PC)上的Spark中进行编程。 我是新手,没有使用Scala和Spark进行编程的经验。 因此,我将非常感谢您的帮助。
问题:
我有一个HashMap,hMap1,其值是Integer条目的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]
的数据rdd1 = [2, 3], [1, 109], [88, 17]
并且rdd2 = [2, 3], [1, 109], [5,45]
数据rdd2 = [2, 3], [1, 109], [5,45]
输出量
所以输出= [2, 3], [1, 109]
问题陈述
我对您的问题的理解如下:
给定两个类型为
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]
类型的元素,但是请注意,除非您定义了MyObject
的相等协定 ,否则这不能推广到任何对象Set[MyObject]
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.