根据Spark Scala中输入的字符串日期过滤数据框

时间:2018-07-19 04:17:35

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

我有一个表,该表的列为'date',日期格式为yyyyMMdd。我需要过滤此数据框并返回仅包含日期大于输入的行的数据框,例如:返回日期大于“ 20180715”的所有行。我做了以下事情。

scala> df.groupBy("date").count.show(50,false)  
+--------+----------+                                                              
|date    |count     |  
+--------+----------+  
|20180707|200       |  
|20180715|1429586969| 
|20180628|1425490080| 
|20180716|1429819708|  
+--------+----------+ 

scala> var con = df.filter(to_date(df("date"),"yyyyMMdd").gt(lit("20180715")))

scala> con.count
res4: Long = 0

scala> var con = df.filter(to_date(df("date"),"yyyyMMdd").gt(lit("20170715")))

scala> con.count
res1: Long = 4284896957 

当我将日期输入为“ 20170715”时,它将对所有记录进行计数,而如果日期为“ 20180715”,则过滤条件不起作用。与字符串日期进行比较的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

更改传递给lit函数的输入字符串的格式即可解决此问题。

scala> var con = df.filter(to_date(df("date"),"yyyyMMdd").gt(lit("2018-07-15"))) 

scala> con.count 
res6: Long = 1429819708