Spark 数据帧筛选("where")子句的自定义解释



>我有一个将数据存储在 s3 上的镶木地板数据集中的系统。每个数据集都包含单个日历日期的数据。

我希望能够以普通 sql 术语查询单个日期、一组日期或一系列日期。 但是,我不需要获取所有数据集只是为了丢弃其中的大部分数据集,而是想拦截查询解释并根据与日期相关的子句进行明显的优化。

如何自定义火花数据帧/数据查询解释? 例如select * from X where day = '2018-06-16'应该只获取/datasets/X/2018-06-16中的数据集。同样的问题也适用于使用数据帧DSL,而不是真正附加到使用SQL。

第三方连接器(例如 Cassandra(必须对查询 AST 执行相同类型的拦截。如果它太混乱,使用 UDF 是一个可行的起点吗?

我未能找到相关文档,但可能是由于搜索了错误的术语

如果您能够将 s3 目录从/datasets/X/2018-06-16更改为/datasets/X/dt=2018-06-16. 然后像这样创建数据集

val ds = spark.read.parquet("/datasets/X")

您可以轻松查询

ds.where("dt = '2018-06-16'")

ds.where("dt >= '2018-06-10' and dt <= '2018-06-16'")

它只是读取您在 where 子句条件中提到的特定日期

最新更新