pyspark - PySpark:使用 Split 和 withColumn 将具有不同字符标记的 DF 列拆分为另一列
问题描述
您好,我在数据框中有此列:
|事件时间|
2019-12-01 00:17:...
2019-12-01 00:17:...
2019-12-01 00:17:...
2019-12-01 00:17:...
2019-12-01 00:17:...
_______________________________________________________'
我想拆分 event_time 列,将一天放入一天列,将小时放入一小时列。这是我到目前为止所拥有的(注意我的 dataFrame 被称为 purchaseDF.
from pyspark.sql import functions as F
cols = F.split(purchaseDF['event_time'],'-')
dateDF = purchaseDF.withColumn('Day',cols.getItem(2))
dateDF.show(10)
输出也包括小时,我不确定我做错了什么。任何帮助,将不胜感激。同样,我只想将日期的“01”移至新列。
谢谢
解决方案
这是因为 in 的值cols.getItem(2)
将是第二个之后的所有内容-
,即01 00:17:...
.
您可以使用substring
仅获得一天而忽略其他人:
purchaseDF.withColumn('Day',cols.getItem(2).substr(1,2))
或将event_time
列转换为timestamp
并使用dayofmonth
和hour
函数:
from pyspark.sql.functions import *
purchaseDF.withColumn('event_time', col('event_time').cast("timestamp"))\
.withColumn('Day', dayofmonth('event_time'))
.withColumn('Hour', hour('event_time')).show()
推荐阅读
- java - OffsetDateTime 到毫秒
- java - Java Spring 5 Get 和 findById mongo MonoOnErrorResume
- spring-boot - Spring WebFlux 和 WebClient 更改错误响应
- html - 在容器底部对齐图像
- c++ - 线程 1:Xcode 错误中的 EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
- spring - Spring Web Flux Mongo 查询
- ionic-framework - ionic 3禁用所有硬件按钮防止退出应用程序
- javascript - 节点 - 用于更新数据库的 For 循环不起作用
- ruby - 是否可以在 Ruby 中访问“main:Object”?
- json - 以与输入中给出的相同顺序读取键值对中的 json 文件