scala - 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
函数一起破解它,但我想有更好的方法使用 ato_date
或unix
函数(我尝试转换为秒,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 中将字符串转换为日期时间?
如果不清楚,问题是如何按小时范围有效地过滤字符串日期?
解决方案
您需要“正常”时间戳,而不是 unix_timestamp。
像这样的东西应该可以工作,尽管我对确切的咒语有些生疏:
df
.withColumn(
"hour",
hour(to_timestamp($"foo", "MM/dd/yyy hh:mm:ss a"))
).filter($"hour" between (19,20))
推荐阅读
- node.js - Oclif 提示测试
- apache-spark - 在多列上使用 collect_list 和 collect_set 时如何保留列表的顺序?
- coding-style - 如果camelCase的第一个单词,首字母缩写词是否应该在camelcase中大写?
- jquery - 从 url 输入预览图像
- c# - 如何将gridview中选定行的数据传输到另一个aspx页面到asp控件中?
- django - 如何使用从模板到另一个模板的任何主键进入详细信息视图?
- vba - 如何在 MS Access VBA 中获取 MSForms.DataObject 内容的大小
- solr - 在搜索字段时转义 Solr 查询中的特殊字符?
- python - 循环遍历由 csv 文件组成的目录以执行 python 代码
- scala - 从 Spark 将 HDFS 分区列表/检索为 Map(String,List(String))