我有一个系统,将数据存储在 s3 上的 parquet 数据集中。每个数据集包含单个日历日期的数据。
我希望能够以纯 SQL 术语查询单个日期、一组日期或一系列日期。 但我不需要获取所有数据集来丢弃其中的大部分数据,而是想拦截查询解释并根据日期相关子句进行明显的优化。
如何自定义 Spark DataFrame/Dataest 查询解释?例如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 子句条件中提到的特定日期
关于java - Spark 数据帧过滤 ("where") 子句的自定义解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50887322/