用于筛选器下推的 SPARK 数据源 V2 API 说明



我一直在阅读数据源 V2 API 和过滤器下推(大概是分区修剪(。在示例中,有人谈到了Push Down to mySQL。

好吧,我不清楚。我在这里和那里看到关于数据源 V2 API 的讨论(例如,在探索 Spark 数据源 V2 - 第 4 部分:带分区的内存中数据源中(。一切都很好,但是我已经可以为mySQL进行下推,如答案所述。讨论以某种方式暗示了相反的情况——所以我显然错过了一点——沿着这条线的某个地方,我想知道是什么。

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

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

这可确保并非所有数据都返回到 SPARK。

那么,我错过了什么?

这可确保并非所有数据都返回到 SPARK。

是的,确实如此,但是

val df = sparkr.read.jdbc(url, "mytab", ...)
df.where($"day" === "2016-11-25" and $"hour" === 10)

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

数据源 V2 API 中的筛选器下推

数据源 V2 API中,只有具有支持下推筛选器接口的数据源支持筛选器下推性能优化。

数据源是否支持数据源 V2 API 中的筛选器下推只是签出基础DataSourceReader的问题。

对于MySQL,它将是由JdbcRelationProvider表示的JDBC数据源,该提供程序似乎不支持数据源V2 API(通过ReadSupport(。换句话说,我怀疑数据源 V2 API 数据源是否支持 MySQL,因此预计新的数据源 V2 API 中不会进行过滤器下推。

数据源 V1 API 中的筛选器下推

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

在 JDBC 数据源的情况下,过滤器下推确实受到前PrunedFilteredScan协定的支持(仅 JDBCRelation 使用它(。但是,这是数据源 V1 API。

最新更新