Spark 聚合多列或哈希

问题描述 投票:0回答:1

假设我想删除重复项或对 Spark 数据框中的 3 列执行聚合。 这样做会更优化吗

 df = df.withColumn(
        "hash_dup",
        f.hash(
            f.coalesce(f.col("id_1"), f.lit("")),
            f.coalesce(f.col("id_2"), f.lit("")),
            f.coalesce(f.col("id_3"), f.lit(""))
        )
    ).dropDuplicates(["hash_dup"])

或者使用以下列直接删除重复项:

 df = df.dropDuplicates(["id_1","id_2","id_3"])

谢谢。

apache-spark pyspark amazon-emr
1个回答
0
投票

由于这两个函数都在做同样的事情,我建议立即使用 dropDuplicates 函数。

这是两种方法的执行计划的比较。

  • 方法1

enter image description here

  • 方法2 enter image description here

正如您在方法 1 中看到的,spark 必须执行更多工作才能首先合并、散列,然后删除重复项。而在方法 2 中,spark 可以直接进入随机播放并删除重复项。

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.