我一直在阅读Data Source V2 API和Filter Pushdown(大概是分区修剪)。在示例中,我们讨论了下推到mySQL。
好的,我不清楚。我在各处(例如Exploring Spark DataSource V2 - Part 4 : In-Memory DataSource with Partitioning)都看到了有关数据源V2 API的讨论。一切都很好,但是我可以使mySQL的下推工作已经成为答案。讨论暗示着相反的意思-所以我很明显地遗漏了一点-我想知道什么。
我的问题/观察结果是我已经可以对mySQL之类的JDBC源执行“过滤器下推”。例如。如下:
sql = "(select * from mytab where day = 2016-11-25 and hour = 10) t1"
这确保并非所有数据都被带回SPARK。
那么,我想念什么?
答案 0 :(得分:1)
这确保并非所有数据都被带回SPARK。
是的,但是
val df = sparkr.read.jdbc(url, "mytab", ...)
df.where($"day" === "2016-11-25" and $"hour" === 10)
也应该如此,只要不需要强制转换,就不必考虑版本(1.4向前)。
答案 1 :(得分:0)
在 Data Source V2 API 中,只有具有DataSourceReaders和SupportsPushDownFilters界面的数据源才支持过滤器下推性能优化。
数据源是否在Data Source V2 API中支持过滤器下推只是检查基础DataSourceReader
的问题。
对于MySQL,它是由JdbcRelationProvider表示的JDBC数据源,它似乎不支持Data Source V2 API(通过ReadSupport)。换句话说,我怀疑MySQL是否受Data Source V2 API数据源支持,因此在新的Data Source V2 API中不会进行过滤器下推。
这并不排除可以通过其他一些非Data Source V2 API(即 Data Source V1 API ”使用过滤器下推优化)。
对于JDBC数据源,以前的PrunedFilteredScan
约定确实支持过滤器下推(仅JDBCRelation使用nota bene)。但这就是数据源V1 API。