scala - 如何在 Spark SQL 中按日期范围过滤

标签 scala apache-spark apache-spark-sql

我正在尝试使用数据 block 从以下数据中过滤日期范围,该数据 block 返回 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"))

非常感谢任何帮助。

最佳答案

从我的脑海中,我会通过在阅读日期列时转换日期列然后使用别名应用过滤器来完成以下操作:

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|
//+---+----------+

关于scala - 如何在 Spark SQL 中按日期范围过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33938806/

相关文章:

scala - Scala带尾空格

java - 了解收件箱的发送方法

java - Akka:我应该在 Actor 中使用parallelStream还是executors

apache-spark - 用户在使用 spark.sql 读取数据时没有 ALTERTABLE_ADDCOLS 权限

java - 如何在 Akka 中确定消息何时发送

hadoop - 退出代码和退出状态是否意味着 Spark ?

apache-spark - 为 kafka 主题 : No current assignment for partition topic1 分配新分区(旧分区被撤销)后,Spark Streaming 作业失败

scala - 如何获取 RDD 的子集?

apache-spark - 在 SPARK 中将多列组合成单列

apache-spark - Spark SQL 广播哈希连接