gpt4 book ai didi

apache-spark - 如何防止谓词下推?

转载 作者:行者123 更新时间:2023-12-04 04:12:10 29 4
gpt4 key购买 nike

最近我正在使用带有 JDBC 数据源的 Spark。考虑以下片段:

val df = spark.read.(options).format("jdbc").load();
val newDF = df.where(PRED)

PRED 是谓词列表。

如果 PRED 是一个简单的谓词,比如 x = 10 ,查询会快很多。但是,如果有一些非同等条件,例如 date > someOtherDate or date < someOtherDate2 ,查询比没有谓词下推要慢得多。您可能知道,数据库引擎对此类谓词的扫描速度非常慢,在我的情况下甚至慢 10 倍(!)。

为了防止不必要的谓词下推,我使用了:

val cachedDF = df.cache()
val newDF = cachedDF.where(PRED)

但它需要大量内存并且 - 由于这里提到的问题 - Spark' Dataset unpersist behaviour - 我不能不坚持 cachedDF .

还有其他选择可以避免下推谓词吗?没有缓存也没有编写自己的数据源?

注意:即使有关闭谓词下推的选项,它也仅适用于其他查询可能仍在使用它。所以,如果我写:

// some fancy option set to not push down predicates
val df1 = ...
// predicate pushdown works again
val df2 = ...
df1.join(df2)// where df1 without predicate pushdown, but df2 with

最佳答案

已为此问题打开了 JIRA 票证。你可以在这里关注它:
https://issues.apache.org/jira/browse/SPARK-24288

关于apache-spark - 如何防止谓词下推?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50336355/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com