原始数据
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())
答案 0 :(得分:0)
你可能会这样:
val distinct = df.mapPartitions(it => {
val set = Set();
while (it.hasNext) {
set += it.next()
}
return set.iterator
});
答案 1 :(得分:0)
不是与集合。事实上,如果数据量很大,Set 就太危险了。 您可以想到的一种选择是添加 mapPartitionsWithIndex 并将索引添加为输出迭代器。这样在你的 DF 中,分区索引就存在了。稍后,通过传递分区号和另一个键来应用删除重复项。理想情况下,对于键和映射分区的组合,重复记录将被删除。