Python 从字符串PySpark获取年、月、日
我需要从Spark df中Python 从字符串PySpark获取年、月、日,python,apache-spark,datetime,parsing,pyspark,Python,Apache Spark,Datetime,Parsing,Pyspark,我需要从Spark df中时间列中的字符串中获取年、月、日、小时。我还需要将这些值保存在单独的列中。数据如下所示: ID Time 111 2020-03-23-12:40:04 112 2020-04-23-12:40:04 113 2020-05-23-12:40:04 所需输出为: ID Year Month Day 111 2020
时间
列中的字符串中获取年、月、日、小时
。我还需要将这些值保存在单独的列中。数据如下所示:
ID Time
111 2020-03-23-12:40:04
112 2020-04-23-12:40:04
113 2020-05-23-12:40:04
所需输出为:
ID Year Month Day
111 2020 03 23
112 2020 04 23
113 2020 05 23
我试过:
data_df.select(
year("Time").alias('year'),
month("Time").alias('month'),
dayofmonth("Time").alias('day')
).show()
它返回了所有空值。我假设
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(数据,['ID','Time'])
df\
.withColumn('t',F.to_timestamp('Time','yyyy-MM-dd HH:MM:ss'))\
.选择('ID',
F.年份(“t”)。别名(“年份”),
F.月份('t')。别名('month'),
F.dayofmonth('t')。别名('day'),
F.hour('t')。别名('hour'))
).show()
这将产生:
+---+----+-----+---+----+
|ID |年|月|日|小时|
+---+----+-----+---+----+
|111|2020| 3| 23| 12|
|112|2020| 4| 23| 12|
|113|2020| 5| 23| 12|
+---+----+-----+---+----+
这是什么类型的数据?时间列?它是字符串还是时间戳?@werner您好,它是StringType
。然后它将删除空值。您应该首先使用来设置时间戳
来将字符串转换为时间戳。年
,月
等应该返回预期结果如果我只想解析它而不转换…需要一个udf函数,它比to_timestamp和date函数慢得多