首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除每个分区的重复项

删除每个分区的重复项
EN

Stack Overflow用户
提问于 2017-02-17 13:41:40
回答 2查看 1.8K关注 0票数 2

原始数据

代码语言:javascript
复制
cls, id  
----
a, 1
a, 1
----
b, 3
b, 3
b, 4

预期输出

代码语言:javascript
复制
cls, id  
----
a, 1
----
b, 3
b, 4

id只能在同一个cls中重复,即同一个cls之间不存在相同的id。

那样的话。

代码语言:javascript
复制
df.dropDuplicates($id) 

将跨所有分区进行洗牌,通过日志服务检查重复项。并重新分区为200(默认值)

现在,如何对每个分区分别运行dropDuplicates,以降低计算成本?

就像这样

代码语言:javascript
复制
df.foreachPartition(_.dropDuplicates())
EN

回答 2

Stack Overflow用户

发布于 2017-02-17 14:23:02

你可能想要这样的东西:

代码语言:javascript
复制
val distinct = df.mapPartitions(it => {
    val set = Set();
    while (it.hasNext) {
        set += it.next()
    }
    return set.iterator
});
票数 1
EN

Stack Overflow用户

发布于 2021-04-11 00:35:45

而不是with set。事实上,如果数据量很大,Set就太危险了。您可以想到的一种选择是添加mapPartitionsWithIndex并将索引作为输出迭代器添加。这样,分区索引就存在于您的DF中。稍后,通过传递分区号和另一个键来应用drop duplicates。理想情况下,对于键和映射分区的组合,可以删除重复的记录。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42290248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档