[英]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.