SPARK数据源V2 API澄清过滤器下推

时间:2018-08-16 07:04:47

标签: apache-spark apache-spark-sql

我一直在阅读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。

那么,我想念什么?

2 个答案:

答案 0 :(得分:1)

  

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

是的,但是

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

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

也应该如此,只要不需要强制转换,就不必考虑版本(1.4向前)。

答案 1 :(得分:0)

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

Data Source V2 API 中,只有具有DataSourceReadersSupportsPushDownFilters界面的数据源才支持过滤器下推性能优化。

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

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

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

这并不排除可以通过其他一些非Data Source V2 API(即 Data Source V1 API ”使用过滤器下推优化)。

对于JDBC数据源,以前的PrunedFilteredScan约定确实支持过滤器下推(仅JDBCRelation使用nota bene)。但这就是数据源V1 API。