簡體   English   中英

兩個HashMap的交集(HashMap <Integer,HashSet<Integer> &gt;)Scala中的RDD for Spark

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM