[英]compare values of two pair of RDDs based on key in scala
有沒有辦法根據鍵比較 2 對RDDs
的值。
例如:
RDD1: RDD[(Int, String)] = {(1, "ABC"), (2, "XYZ"), (3, "PQR")}
RDD2: RDD[(Int, String)] = {(5, "AAA"), (2, "XYZ"), (3, "LMN")}
我的任務是獲取值不同的兩個rdds
中存在的鍵數。
連接為rdd
提供了鍵2
和3
。 但我希望最終輸出為3
因為值不同。
我嘗試了以下方法:
var diff = rdd1.join(rdd2).map{case(k,(s1,s2))=> if (s1!=s2) (k,s1)}
所以我可以得到差異的數量。 但它同時提供了鍵2
和3
。 我想我需要其他條件來跳過匹配值。
誰能建議我如何達到預期的結果? (或使用任何不同的方法)。
使用collect
,它采用偏函數並刪除未定義偏函數的值。 然后,在 case 語句中包含“if”作為保護,而不是 case 結果表達式的一部分:
val diff = rdd1.join(rdd2).collect {
case (k, (s1, s2)) if s1 != s2 => (k, s1)
}
這樣,部分函數將不會在s1 == s2
定義,這將使collect
過濾掉它們。
一個等效(但稍微不那么優雅)的解決方案將使用map
和filter
- 單獨map
將始終返回與輸入相同數量的記錄:
val diff = rdd1.join(rdd2).filter {
case (k, (s1, s2)) => s1 != s2
}.map {
case (k, (s1, s2)) => (k, s1)
}
使用leftInnerJoin
到第一個 rdd 中存在的鍵並依靠它。
val diff = rdd1.leftOuterJoin(rdd2).count()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.