【问题标题】:Spark SQL .distinct() performanceSpark SQL .distinct() 性能
【发布时间】:2018-03-05 01:58:20
【问题描述】:

我想通过 JDBC 从数据库中获取数百 GB 的数据,然后使用 Spark SQL 对其进行处理。目前我正在对该数据进行一些分区,并且处理是按批次的百万记录。问题是我还想对我的数据帧应用一些重复数据删除,我打算放弃分离批处理的想法,并尝试使用相应分区的一个数据帧来处理数百 GB。

主要问题是:在这种情况下 .distinct() 将如何工作? Spark SQL 是否会首先尝试将所有数据加载到 RAM 中,然后应用涉及许多 shuffle 和重新分区的重复数据删除?我是否必须确保集群有足够的 RAM 来包含原始数据,或者它是否能够帮助自己使用 HDD 存储(从而降低性能)?

或者我应该在没有 Spark 的情况下执行此操作 - 将数据移动到目标存储,然后应用不同的计数并检测重复并删除它们?

【问题讨论】:

    标签: sql apache-spark duplicates distinct


    【解决方案1】:

    Spark SQL 不使用predicate pushdown 进行distinct 查询;这意味着过滤掉重复记录的处理发生在执行程序上,而不是在数据库上。因此,您关于在执行者处发生洗牌以处理 distinct 的假设是正确的。

    尽管如此,我仍然建议您继续在 Spark 上执行重复数据删除,而不是为其构建单独的安排。我对distinct 的个人体验非常令人满意。一直以来,我的按钮都是连接。

    【讨论】:

      猜你喜欢
      • 2016-06-10
      • 2023-03-10
      • 1970-01-01
      • 2015-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多