首页 > 解决方案 > 如何按日期过滤 Spark 数据框?

问题描述

因此,我使用的 spark 数据框有一个字段“a”,其中包含时间戳数据,但由于写入数据的问题,有一个“字符串”字段。

我想在涉及“AND”和“OR”逻辑的数据帧上执行某个sql,如下所示:

select * from df where ((df.a>="2018-09-01" AND df.b==1) OR
(df.a>="2019-12-31" AND df.b==2))

所以,我在第一部分尝试了这个片段:

val new_df=df.filter((df("b")==1 && 
to_date(df("a")) >= to_date(lit("2018-09-01"))))

但我得到了错误:

<console>:25: error: type mismatch;
 found   : org.apache.spark.sql.Column
 required: Boolean
       val new_df=df.filter((df("b")==1 && to_date(df("start_date")) >= to_date(lit("2018-09-01"))))

我应该如何为我想要的整个逻辑执行此操作?

标签: scaladataframeapache-spark

解决方案


使用lit功能。

val new_df=df.filter(to_date(df("a")) >= to_date(lit("2018-09-01")))
val new_df=df.filter((df("b")=== lit(1) && 
to_date(df("a")) >= to_date(lit("2018-09-01"))))

推荐阅读