1 回答

TA貢獻1878條經(jīng)驗 獲得超4個贊
我假設(shè)該Time列是一個字符串。您可以使用正則表達式提取所需的值,但這會非常痛苦。另一種選擇是將字符串轉(zhuǎn)換為時間戳,然后使用函數(shù)等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()
產(chǎn)生:
+---+----+-----+---+----+
| ID|year|month|day|hour|
+---+----+-----+---+----+
|111|2020| 3| 23| 12|
|112|2020| 4| 23| 12|
|113|2020| 5| 23| 12|
+---+----+-----+---+----+
添加回答
舉報