Spark SQL .distinct()性能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark SQL .distinct()性能相关的知识,希望对你有一定的参考价值。

我想通过JDBC从数据库中获取几百千兆字节,然后使用Spark SQL处理它。目前我正在对该数据进行一些分区,并且过程是按批量记录进行的。问题是我还想对我的数据帧应用一些重复数据删除技术,我将留下分离批处理的想法,并尝试使用相应分区的一个数据帧来处理数百GB。

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

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

答案

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

尽管如此,我仍然建议你继续在Spark上执行重复数据删除,而不是为它构建一个单独的安排。我在distinct的个人经历令人满意。它一直是推动我的按钮的连接。

以上是关于Spark SQL .distinct()性能的主要内容,如果未能解决你的问题,请参考以下文章

Spark 上的 SQL:如何获取 DISTINCT 的所有值?

Spark 学习笔记之 distinct/groupByKey/reduceByKey

spark 例子count(distinct 字段)

SQL 性能:SELECT DISTINCT 与 GROUP BY

如何提高 Sql server 中 Distinct Query 的性能

SQL Server 查询:Union vs Distinct union 所有性能