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

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

问题描述

原始数据

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天全站免登陆