如何在Spark SQL中按日期范围筛选数据

3
我正在尝试使用Data bricks过滤以下数据的日期范围,但返回null。 我的csv数据如下:
ID, Desc, Week_Ending_Date
100, AAA, 13-06-2015
101, BBB, 11-07-2015
102, CCC, 15-08-2015
103, DDD, 05-09-2015
100, AAA, 29-08-2015
100, AAA, 22-08-2015

我的问题是:
df.select(df("ID"), date_format(df("Week_Ending_Date"), "yyyy-MM-dd"))
.filter(date_format(df("Week_Ending_Date"), "yyyy-MM-  dd").between("2015-07-05", "2015-09-02"))

非常感谢您的帮助。

1个回答

8

从我的角度出发,我会在读取日期列时将其转换,并使用别名应用过滤器:

import java.text.SimpleDateFormat

val format = new SimpleDateFormat("dd-MM-yyyy")
val data = sc.parallelize(
  List((100, "AAA", "13-06-2015"), (101, "BBB", "11-07-2015"), (102, "CCC", "15-08-2015"), (103, "DDD", "05-09-2015"), (100, "AAA", "29-08-2015"), (100, "AAA", "22-08-2015")).toSeq).map {
  r =>
    val date: java.sql.Date = new java.sql.Date(format.parse(r._3).getTime);
    (r._1, r._2, date)
}.toDF("ID", "Desc", "Week_Ending_Date")

data.show

//+---+----+----------------+
//| ID|Desc|Week_Ending_Date|
//+---+----+----------------+
//|100| AAA|      2015-06-13|
//|101| BBB|      2015-07-11|
//|102| CCC|      2015-08-15|
//|103| DDD|      2015-09-05|
//|100| AAA|      2015-08-29|
//|100| AAA|      2015-08-22|
//+---+----+----------------+

val filteredData = data
           .select(data("ID"), date_format(data("Week_Ending_Date"), "yyyy-MM-dd").alias("date"))
           .filter($"date".between("2015-07-05", "2015-09-02"))

//+---+----------+
//| ID|      date|
//+---+----------+
//|101|2015-07-11|
//|102|2015-08-15|
//|100|2015-08-29|
//|100|2015-08-22|
//+---+----------+

你的DataFrame模式是什么?你似乎在不同的数据格式上有类似的问题... - eliasah
1
如果您有相同的模式,那么filteredData的代码行就足够了。我只是使用parallelize方法来创建我的数据框架,如果您的数据框架已经被创建并且拥有相同的模式,则不需要这一步! - eliasah
我回到了Spark 1.3.1,其中还不存在date_format函数。我想知道它何时会被需要。这也可以工作:dim.printSchema根 | — start_date: 字符串(可为空= true) | — end_date: 字符串(可为空= true)processing.printSchema 根 | — processing_date: 字符串(可为空= true)dim.join(processing).filter(processing("processing_date").geq(dim("start_date")).and(processing("processing_date").lt(dim("end_date")))).printSchema - bruce szalwinski
@bruceszalwinski,Spark 中有很多执行操作的方法,我只是提供了其中一种方式! :) - eliasah
1
考虑它为语法糖!虽然存在隐式转换。 - eliasah
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接