Spark数据帧过滤(“where”)子句

时间:2018-06-16 11:02:40

标签: java scala apache-spark apache-spark-sql

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

我希望能够以简单的SQL术语查询单个日期,一组日期或一系列日期。 但是,我不是只需要取出所有数据集来丢弃大部分数据集,而是希望拦截查询解释并根据与日期相关的条款进行明显的优化。

如何自定义spark数据帧/ dataest查询解释?例如select * from X where day = '2018-06-16'应仅在/datasets/X/2018-06-16中获取数据集。同样的问题适用于使用数据帧DSL,而不是真正依赖于使用SQL。

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

我找不到相关文档,但可能是因为搜索错误的术语

1 个答案:

答案 0 :(得分:2)

如果您能够将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子句条件中提到的特定日期