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