Pyspark - применить функцию datetime.time ко всем строкам данных - PullRequest
0 голосов
/ 15 мая 2018

Я работаю над pyspark и у меня есть датафрейм с двумя значениями int, соответствующими часам и минутам:

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

Я хотел бы создать новый столбец типа datetime со следующим кодом:

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

Но я получаю следующую ошибку:

TypeError: an integer is required

Как ее решить?Большое спасибо :)

1 Ответ

0 голосов
/ 15 мая 2018

Вы передаете искру 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...|
+-----+---+--------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...