簡體   English   中英

刪除每個分區的重復項

[英]Drop duplicates for each partition

原始數據

cls, id  
----
a, 1
a, 1
----
b, 3
b, 3
b, 4

預期產出

cls, id  
----
a, 1
----
b, 3
b, 4

id 只能在相同的 cls 中重復,這意味着跨 clses 不存在相同的 id。

在這種情況下。

df.dropDuplicates($id) 

將在所有分區中隨機播放以檢查 cls 上的重復項。 並重新分區為 200(默認值)

現在,如何分別為每個分區運行 dropDuplicates 以降低計算成本?

就像是

df.foreachPartition(_.dropDuplicates())

你可能在追求這樣的事情:

val distinct = df.mapPartitions(it => {
    val set = Set();
    while (it.hasNext) {
        set += it.next()
    }
    return set.iterator
});

不是沒有設置。 事實上,如果數據量很大,Set 就太危險了。 您可以想到的一種選擇是添加 mapPartitionsWithIndex 並將索引添加為輸出迭代器。 這樣在你的 DF 中,分區索引就存在了。 稍后,通過傳遞分區號和另一個鍵來應用刪除重復項。 理想情況下,對於鍵和映射分區的組合,重復記錄被刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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