apache-spark - 删除每个分区的重复项

标签 apache-spark apache-spark-sql

原始数据

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

预期输出

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

id只能在同一个cls中重复,也就是说同一个id不能跨cls存在。

在那种情况下。

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
});

关于apache-spark - 删除每个分区的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42290248/

相关文章:

apache-spark - 在 yarn 客户端模式下设置/运行 spark (spark-shell)

apache-spark - 没有 orderBy 的 Spark 窗口函数

hadoop - 当中间输出不适合 Spark 中的 RAM 时会发生什么

scala - 使用 Spark Streaming 从 http 创建分析

scala - Spark - StorageLevel(DISK_ONLY 与 MEMORY_AND_DISK)和内存不足 Java 堆空间

scala - 在 Spark 中使用键作为列名和值作为行的 HashMap 创建数据框

apache-spark - Hive 查询以查找中间几周的计数

sql - 如何让 Spark 处理更大的数据集?

apache-spark-sql - Spark SQL可以在GROUP BY聚合中使用FIRST_VALUE和LAST_VALUE(但这不是标准的)

python - 使用 Pyspark-sql 将 unix 时间转换为日期时间的结果不正确