Равно .применить от Pandas к PySpark - PullRequest
0 голосов
/ 06 августа 2020

У меня есть следующий фрейм данных на pyspark

+--------------------+-----+
|            activity| diff|
+--------------------+-----+
|      Ajustar nómina|33339|
|Generar archivo p...| 1383|
|Generar archivo p...|  269|
|Contabilizar Nomi...|  561|

и следующая функция, которую я сделал

def to_date(seconds=0):
'''
:param seconds:
:return:
'''
dat = ''
if seconds == 0:
    return '0 s'
if (seconds / 2678400) >= 1:
    month = round((seconds/2678400), 1)
    # seconds = (seconds - 2678400 * int(seconds / 2678400))
    if month > 1:
        return f'{month} months'
    else:
        return f'{month} month'
if (seconds / 86400) >= 1:
    day = round((seconds / 86400), 1)
    # seconds = (seconds - 86400 * int(seconds / 86400))
    if day > 1:
        return f'{day} days'
    else:
        return f'{day} day'
if (seconds / 3600) >= 1:
    hour = round((seconds / 3600), 1)
    # seconds = (seconds - 3600 * int(seconds / 3600))
    return f'{hour} hr'
if (seconds / 60) >= 1:
    minutes = (int(seconds / 60))
    return f'{minutes} min'
else:
    seconds = int(seconds)
    return f'{seconds} s'
return dat

Я хотел бы знать, есть ли на pyspark df.apply(to_date) PySpark, я бы хотел добиться применения функции to_date в каждой строке PySpark Dataframe df.

Спасибо!

1 Ответ

0 голосов
/ 06 августа 2020

Отвечая на свой вопрос, я понял, как это сделать:

udf_to_date = F.udf(to_date, StringType())
df = df.withColumn("mean_2", udf_to_date("diff")) 

Если кто-то знает лучшее решение, я готов их получить, спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...