首页 > 解决方案 > 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”移至新列。

谢谢

标签: pysparksplitpyspark-dataframes

解决方案


这是因为 in 的值cols.getItem(2)将是第二个之后的所有内容-,即01 00:17:....

您可以使用substring仅获得一天而忽略其他人:

purchaseDF.withColumn('Day',cols.getItem(2).substr(1,2))

或将event_time列转换为timestamp并使用dayofmonthhour函数:

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()

推荐阅读