我正在开发 pyspark,我有一个包含两个 int 值的数据框,对应于小时和分钟:
+------------------------+----------------------+
|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
如何解决?非常感谢:)
最佳答案
您将 Spark 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...|
+-----+---+--------------------+
关于python - Pyspark - 将 datetime.time 函数应用于数据帧的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50347734/