python - 从字符串 PySpark 中获取年、月、日
问题描述
我需要从Spark dfYear, Month, Day, Hour
列中的字符串中获取。Time
我还需要将这些值保存在单独的列中。数据如下所示:
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()
它返回所有 Null 值。
解决方案
我假设该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|
+---+----+-----+---+----+
推荐阅读
- javascript - 如何创建下拉列表系统以使用 Angular 过滤结果?
- typescript - 通过索引引用访问字段并保持正确的类型
- python - 返回满足分组条件的行
- javascript - 在 immutable.js 中相交两个以上集合的最佳方法是什么?
- backgroundworker - 关于后台工作线程中的 Thread.Sleep 的问题
- django - 是否应该使用基于函数的视图或 CBV 来实现小的特定视图?
- cmake - Why is the toolchain file executed a few times in CMake?
- node.js - 确定节点js中文件使用的换行符
- javascript - 通过自动点击特定类别(多个类别)链接到页面 - JavaScript 和 CSS
- python - 如何在同一张图上打印堆积条形图和折线图?