【问题标题】:How to filter by date range in Spark SQL如何在 Spark SQL 中按日期范围过滤
【发布时间】:2015-11-26 12:30:44
【问题描述】:

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

非常感谢任何帮助。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 我已经在数据框var df = sqlContext.read.format("com.databricks.spark.csv") .option("header", "true") .option("inferSchema", "true") .load("test.csv");中设置了这些样本值,而不是并行化列表中的值,这是我的数据框,我已经通过github.com/databricks/spark-csv插件加载了数据
    • 你的 DataFrame 架构是什么?您似乎在不同的数据格式上也有类似的问题...
    • 问题中提到的相同架构
    • 如果您有相同的架构,那么过滤数据的代码行就足够了。我使用并行化方法只是为了创建我的数据框,如果您的数据框已创建并且具有相同的架构,您将不需要它!
    • 将其视为语法糖!有隐式转换思想。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    相关资源
    最近更新 更多