我正在尝试获取以下信息:
+--------------------+
|work_time | day_shift|
+--------------------+
| 00:45:40 | No |
| 10:05:47 | Yes |
| 15:25:28 | Yes |
| 19:38:52 | No |
在这里我把“工作时间”分类为“白班”。
“是”-如果时间介于09:00:00和18:00:00之间
“否”-否则
我的“work_time”是日期时间格式,只显示时间。我尝试了下面的方法,但我得到的都是“不”。
df = df.withColumn('day_shift', when(df.work_time >= to_timestamp(lit('09:00:00'), 'HH:mm:ss') & df.work_time <= to_timestamp(lit('18:00:00'), 'Yes').otherwise('No'))
2条答案
按热度按时间gfttwv5a1#
首先,spark没有所谓的“Time”数据类型,它只支持
TimestampType
或DateType
。因此,我相信您的 Dataframe 中的work_time
是一个字符串。其次,当你在选择语句中检查你的
func.to_timestamp(func.lit('09:00:00'), 'HH:mm:ss')
时,它会显示:最好的方法是将
work_time
列分别拆分为hour
、minute
和second
列并进行过滤,或者在进行任何时间戳过滤之前在work_time
列中添加一个日期值。a0zr77ik2#
您可以使用
Column
类方法between
。它适用于"HH:mm:ss"
的 * 时间戳 * 和 * 字符串 *。请使用以下方法:完整测试: