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

标签 python datetime dataframe pyspark

我正在开发 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/

相关文章:

django - 基于类的 View MySQL DateTimeField 收到了一个简单的日期时间

c# - 有没有更好的方法将 DateTime 修剪到特定精度?

python dask to_parquet 占用大量内存

python - 使用 OR 语句过滤 Pandas 数据框

python - 在 python 字典中获取和设置值的最佳习惯用法

Python pandas - 在 groupby 之后过滤行

python - 将图标添加到选项卡(QTabWidget)?

python - 使用 matplotlib-basemap 将一个多边形添加到绘图中

tsql - 如何在 T-SQL 中将 DATETIME 值转换为 FILETIME 值?

python - 如何在 pandas 和 python 中创建汇总数据