Повторные вызовы withColumn () с использованием одной и той же функции для нескольких столбцов в Pyspark - PullRequest
0 голосов
/ 26 мая 2020

У меня есть фрейм данных, в котором я неоднократно применяю одну и ту же процедуру к нескольким столбцам через несколько цепочек .withColumn, например

   df=     dt.withColumn('PL_start', from_unixtime('PL_start', "yyyy-MM-dd HH:mm:ss")) \
            .withColumn('PL_end??'  , from_unixtime('PL_end', "yyyy-MM-dd HH:mm:ss"))   \
            .withColumn('MU_start', from_unixtime('MU_start', "yyyy-MM-dd HH:mm:ss")) \
            .withColumn('MU_end'  , from_unixtime('MU_end', "yyyy-MM-dd HH:mm:ss"))   \
            .withColumn('PU_start', from_unixtime('PU_start', "yyyy-MM-dd HH:mm:ss")) \
            .withColumn('PU_end'  , from_unixtime('PU_end', "yyyy-MM-dd HH:mm:ss"))   \
            .withColumn('RE_start', from_unixtime('RE_start', "yyyy-MM-dd HH:mm:ss")) \
            .withColumn('RE_end'  , from_unixtime('RE_end', "yyyy-MM-dd HH:mm:ss"))   \
            .withColumn(...)

Я обнаружил, что повторяющиеся вызовы withColumn () с та же функция для нескольких столбцов Вопрос немного устарел. Хотите знать, есть ли способ решения этой проблемы в новой версии Spark, 2.4.3?

1 Ответ

2 голосов
/ 26 мая 2020

вы можете использовать python функцию сокращения для перебора столбцов:

new_df = (reduce(
lambda memo_df, col_name: memo_df.withColumn(col_name, from_unixtime(col(col_name), "yyyy-MM-dd HH:mm:ss")),
df.columns,
df))

Если в вашем df есть столбцы, которые вам не нужно преобразовывать - замените df.columns на последовательность столбцов, которые вы нужно.

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