【问题标题】:How to speed up spark sql filter queries if the where clause is already fixed?如果 where 子句已经修复,如何加快 spark sql 过滤器查询?
【发布时间】:2021-12-30 15:47:47
【问题描述】:

在我的例子中,数据驻留在火花表中,这些表是通过在数据帧上调用 createOrReplaceTempView API 创建的。创建表后,将在表顶部运行几个查询。大多数时候,where 查询将基于特定列。相关列的名称是已知的。我想知道是否可以进行某种优化来提高过滤器查询的性能。 我尝试探索索引方法,但结果表明 spark 不支持索引特定列。

【问题讨论】:

    标签: apache-spark apache-spark-sql


    【解决方案1】:

    您是否查看过 SPARK 用户界面以了解您的大部分时间都花在了哪些地方?真的是大部分时间都花在了查询上吗?通常从磁盘读取数据是花费大部分时间的地方。学习阅读 SPARK UI 并找出真正的瓶颈所在。 SQL 选项卡是一个非常好的开始解决问题的方法。

    以下是适用于大多数工作的在 spark 中运行得更快的一些技巧:

    您能否重新定义问题?您使用的数据格式是否有助于您解决查询?你能改变它的写法来改变问题吗? (您是否可以在查询数据之前开始“预先咀嚼”数据以将其以最佳格式存储以帮助您解决要解决的问题?)大多数性能提升来自更改问题的参数以使它们更容易/更快地解决。

    你是什么格式(是传入的数据) 将数据存储在其中?您使用的是 Parquet/Orc 吗?他们有很大的回报磁盘空间/压缩值得使用。他们还可以启用文件级过滤器以快速读取。您可以将他们的转换工作推向上游以帮助减少查询工作吗?您可以通过有助于查找的分区模式写入数据吗?

    您的输入有多少个文件?您能否合并文件以最大限度地提高读取吞吐量。读取/列出大量小文件作为输入会减慢数据处理速度。

    如果 tempView 查询的大小每次都相似,您可以考虑调整分区计数,使文件更小,但与 HDFS 块大小大致相同。 (假设您使用的是 hdfs)。 HDFS 你必须读取整个块天气你是否使用了所有数据。尝试将其应用于您的多个执行者,以便您一起完成而不是散乱。这很难做到完美,但您可以大步前进以找到合适的比例。

    【讨论】:

      【解决方案2】:

      无需使用 spark 优化过滤条件。 spark 已经足够聪明,可以优化它的条件 post where 查询首先获取最小行。如果一次又一次地查询同一个视图,我猜你能做的最好的事情就是坚持你的 TempView。

      【讨论】:

        猜你喜欢
        • 2011-01-31
        • 1970-01-01
        • 1970-01-01
        • 2016-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-27
        • 2016-07-02
        相关资源
        最近更新 更多