【问题标题】:SPARK datasource V2 API clarification for Filter Push DownSPARK 数据源 V2 API 澄清过滤器下推
【发布时间】:2018-08-16 07:04:46
【问题描述】:

我一直在阅读 Data Source V2 API 和 Filter Pushdown(可能还有分区修剪)。在示例中,有人谈到下推到 mySQL。

好的,我不清楚。我在这里和那里看到了关于数据源 V2 API 的讨论(例如在Exploring Spark DataSource V2 - Part 4 : In-Memory DataSource with Partitioning 中)。一切都很好,但是正如答案所述,我已经可以为 mySQL 下推了。这些讨论以某种方式暗示了相反的意思——所以我显然错过了一点——沿着这条线的某个地方,我想知道是什么。

我的问题/观察是我已经可以为 JDBC 源(例如 mySQL)执行过滤器下推。例如。如下:

sql = "(select * from mytab where day = 2016-11-25 and hour = 10) t1"

这可确保并非所有数据都被带回 SPARK。

那么,我错过了什么?

【问题讨论】:

  • 自 JDBC 源代码的第一个版本以来,Spark 支持下推,并且您使用的示例(在表定义中嵌入查询)不是下推。您对查询进行硬编码,这甚至可以在第一个数据源 API 发布(1.3 左右)之前完成。
  • 好吧,那我现在明白了。但这不是我认识的大多数人对这个词的看法。硬编码与否。我很确定网络上的很多东西都是这样暗示的。我站得更正了。但是你可以用 s 参数化。

标签: apache-spark apache-spark-sql


【解决方案1】:

这可确保并非所有数据都被带回 SPARK。

是的,确实如此,但是

val df = sparkr.read.jdbc(url, "mytab", ...)

df.where($"day" === "2016-11-25" and $"hour" === 10)

也应该,只要不需要强制转换,不管版本(1.4 前)。

【讨论】:

    【解决方案2】:

    数据源 V2 API 中的过滤器下推

    Data Source V2 API中,只有DataSourceReadersSupportsPushDownFilters接口的数据源支持Filter Pushdown性能优化。

    数据源是否支持 Data Source V2 API 中的过滤器下推只是检查底层DataSourceReader 的问题。

    对于 MySQL,它是由 JdbcRelationProvider 表示的 JDBC 数据源,它似乎不支持 Data Source V2 API(通过 ReadSupport)。换句话说,我怀疑 MySQL 是否被 Data Source V2 API 数据源支持,因此预计新的 Data Source V2 API 中不会出现过滤器下推。

    数据源 V1 API 中的过滤器下推

    这并不排除通过其他一些非数据源 V2 API 使用的过滤器下推优化,即 数据源 V1 API

    在 JDBC 数据源的情况下,过滤器下推确实受到以前的 PrunedFilteredScan 合同的支持(这不是仅由 JDBCRelation 使用的)。然而,这就是 Data Source V1 API。

    【讨论】:

      猜你喜欢
      • 2012-02-21
      • 1970-01-01
      • 1970-01-01
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多