如何在特定时间段(日期)之前和之后过滤行?

时间:2018-01-05 15:32:30

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

我的目标是选择一段时间之前/之后的日期。我有一个开始期和结束期。我想过滤两个句点之间包含close_time的行(以及其他一些过滤器,如类别和来源):start period <= close_time >= end period

我尝试过使用:

var StartTime == '2017-03-14'
var EndTime == '2017-03-14'

val df1 = df.withColumn(
  "X_Field", 
  when($"category" === "incident" and $"origin" === "phone" and StartTime <== $"close_time" >== EndTime, 1).otherwise(0)
)

我有错误。这样做的正确语法是什么?谢谢!

1 个答案:

答案 0 :(得分:2)

首先 - 与平等不同,用于更大或更小和更小或相等的正确运算符是<=>=而不是<==和{{1} }。

其次,表达式>==无效 - 第一部分(StartTime <= $"close_time" >= EndTime)计算为 Boolean 条件,然后您尝试与另一个进行比较字符串StartTime <= $"close_time")。

相反,您可以使用>= EndTime

between

这只是简写:

val df1 = df.withColumn("X_Field", when(
  $"category" === "incident" and 
    $"origin" === "phone" and 
    ($"close_time" between (StartTime, EndTime)), 1).otherwise(0)
)