Pyspark - 将 datetime.time 函数应用于数据帧的所有行



我正在研究pyspark,我有一个数据帧,有两个整数值,分别对应于小时和分钟:

+------------------------+----------------------+
|HOURS                   |                   MIN|
+------------------------+----------------------+
|                       9|                    25|
|                      22|                     5|
|                      22|                     5|
|                      22|                     5|
+------------------------+----------------------+

我想使用以下代码创建一个日期时间类型的新列:

import datetime as dt
data = data.withColumn('TIME', dt.time(data["HOURS"], data["MIN"]))

但是我得到以下错误:

TypeError: an integer is required

如何解决?非常感谢:)

您正在将火花Column类型传递给dt.time,因此dt.time提高TypeError。您需要将 python 函数包装到用户定义函数 (UDF( 中,以便将类型Column传递给 python 函数:

import pandas as pd
import datetime as dt
from pyspark.sql.functions import udf

df = pd.DataFrame({"HOURS": [2, 5, 8], 
"MIN": [23, 55, 43]})
dfs = sqlContext.createDataFrame(df)
dfs.show()
+-----+---+
|HOURS|MIN|
+-----+---+
|    2| 23|
|    5| 55|
|    8| 43|
+-----+---+
@udf
def create_timestamp(hour, minute):
return dt.time(hour, minute)
dfs.withColumn('TIME', create_timestamp("HOURS", "MIN")).show()
+-----+---+--------------------+
|HOURS|MIN|                TIME|
+-----+---+--------------------+
|    2| 23|Time: 2 hours, 23...|
|    5| 55|Time: 5 hours, 55...|
|    8| 43|Time: 8 hours, 43...|
+-----+---+--------------------+

最新更新