Scala:按小时范围过滤字符串日期



我正在使用Scala,并尝试在具有日期和时间值的字符串列上筛选数据集。我已经看了好几篇文章,并试图使用SimpleDateFormat技术,但都无济于事。

我的样本数据是:

+----------------------+
|my_date_str           |
+----------------------+
|12/11/2018 08:01:55 AM|
|12/11/2018 08:33:22 PM|
|12/13/2018 09:25:28 PM|
|12/17/2018 07:27:36 PM|
+----------------------+

我想在晚上7点到9点之间保持争吵(日期无关紧要,只有时间(。我希望保留这四行中的两行:

12/17/2018 07:27:36 PM
12/11/2018 08:33:22 PM

我可以使用substring函数来解决这个问题,但我想有一种更好的方法可以使用to_dateunix函数(我试着用unix_timestamp()转换为秒,然后以某种方式推断时间?(,隔离时间,并检查小时值。

// Filter down to rows between 7 and 9 and PM
my_data.withColumn("hour_str", substring($"my_date_str", 12, 8))
.filter( (substring($"my_date_str", -2, 2) === "PM") && ($"my_date_str" >= "07:00:00") && ($"my_date_str" <= "09:00:00") )
.show(truncate=false)

包含太多失败的尝试,但我使用了以下几个帖子:
如何在Spark中将unix时间戳转换为日期
在Scala中将String转换为日期时间?

若不清楚,问题是如何有效地按小时范围过滤字符串日期?

您需要"正常的";timestamp,而不是unix_timestamp。

这样的东西应该有效,尽管我对确切的咒语有些生疏:

df
.withColumn(
"hour", 
hour(to_timestamp($"foo", "MM/dd/yyy hh:mm:ss a"))
).filter($"hour" between (19,20))