1 回答

TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個(gè)贊
我假設(shè)該Time列是一個(gè)字符串。您可以使用正則表達(dá)式提取所需的值,但這會(huì)非常痛苦。另一種選擇是將字符串轉(zhuǎn)換為時(shí)間戳,然后使用函數(shù)等year。month
另外,您的時(shí)間戳不是標(biāo)準(zhǔn)格式,因此您需要指定它。
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|
+---+----+-----+---+----+
添加回答
舉報(bào)