1 回答
TA贡献1878条经验 获得超4个赞
我假设该Time列是一个字符串。您可以使用正则表达式提取所需的值,但这会非常痛苦。另一种选择是将字符串转换为时间戳,然后使用函数等year。month
另外,您的时间戳不是标准格式,因此您需要指定它。
data = [(111, '2020-03-23-12:40:04'),
(112, '2020-04-23-12:40:04'),
(113, '2020-05-23-12:40:04')]
df = spark.createDataFrame(data, ['ID', 'Time'])
df\
.withColumn('t', F.to_timestamp('Time', 'yyyy-MM-dd-HH:mm:ss'))\
.select('ID',
F.year('t').alias('year'),
F.month('t').alias('month'),
F.dayofmonth('t').alias('day'),
F.hour('t').alias('hour')
).show()
产生:
+---+----+-----+---+----+
| ID|year|month|day|hour|
+---+----+-----+---+----+
|111|2020| 3| 23| 12|
|112|2020| 4| 23| 12|
|113|2020| 5| 23| 12|
+---+----+-----+---+----+
添加回答
举报