删除每个分区的重复项 [英] Drop duplicates for each partition

查看:19
本文介绍了删除每个分区的重复项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

原始数据

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

预期输出

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

id 只能在同一个 cls 中重复,表示跨 clses 不存在相同的 id.

id can be duplicates only in same cls, It means same id do not exist across clses.

那样的话.

df.dropDuplicates($id) 

将在所有分区中随机播放以检查 cls 上的重复项.并重新分区为 200(默认值)

will shuffle across all partitions to check duplicates over cls. and repartitioned to 200(default value)

现在,我如何为每个分区单独运行 dropDuplicates 以降低计算成本?

Now, How can I run dropDuplicates for each partition seperately to reduce computing cost?

类似的东西

df.foreachPartition(_.dropDuplicates())

推荐答案

您可能正在追求这样的事情:

You're probably after something like this:

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

这篇关于删除每个分区的重复项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆