2017-08-07 37 views
0

考慮這樣一種情況類上的RDD選擇不同行:如何有效地基於其columns`的一個子集

case class Prod(productId: String, date: String, qty: Int, many other attributes ..) 

而一個

val rdd: RDD[Prod] 

包含類的實例。

該唯一鍵旨在成爲(productId,date)元組。但是,我們確實有一些重複。

有沒有任何有效的方法來刪除重複?

操作

 rdd.distinct 

會尋找那些被複制整個行

回退將涉及將獨特的(productId,date)組合加回到整個行:我正在完成如何執行此操作。但即使如此,這是幾個操作。如果存在一個更簡單的方法(更快?)。

回答

2

我上Dataset使用dropDuplicates

val rdd = sc.parallelize(Seq(
    Prod("foo", "2010-01-02", 1), Prod("foo", "2010-01-02", 2) 
)) 

rdd.toDS.dropDuplicates("productId", "date") 

reduceByKey應該工作以及:

rdd.keyBy(prod => (prod.productId, prod.date)).reduceByKey((x, _) => x).values 
+0

我也碰到這個運行:看起來像是直接打在這裏需要什麼。現在嘗試它。 – javadba

相關問題