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