Как передать список в функции Pyspark «С помощью столбца»

#python-3.x #database #dataframe #apache-spark #pyspark

#python-3.x #База данных #фрейм данных #apache-spark #pyspark

Вопрос:

Я выполняю ltrim и rtrim для нескольких столбцов фрейма данных, но теперь я могу делать это по отдельности. Нравится

 # selected_colums = selected_colums.withColumn("last_name", ltrim(selected_colums.last_name))
# selected_colums = selected_colums.withColumn("last_name", rtrim(selected_colums.last_name))

# selected_colums = selected_colums.withColumn("email", ltrim(selected_colums.email))
# selected_colums = selected_colums.withColumn("email", rtrim(selected_colums.email))

# selected_colums = selected_colums.withColumn("phone_number", ltrim(selected_colums.phone_number))
# selected_colums = selected_colums.withColumn("phone_number", rtrim(selected_colums.phone_number))

  

Но я хочу сделать это в цикле, как показано ниже

 sdk = ['first_name','last_name','email','phone_number','email_alt','phone_number_alt']
for x in sdk:
  selected_colums = selected_colums.withColumn(x, ltrim(selected_colums.last_name))

  

Это выдает синтаксическую ошибку.
Пожалуйста, помогите мне оптимизировать этот код, чтобы для любого количества столбцов я мог выполнять ltrim или rtrim, просто передавая список.

Ответ №1:

Проверьте приведенный ниже код.

Импортируйте необходимые функции

 >>> from pyspark.sql.functions import col
  

Применить ltrim и rtrim ко всем столбцам

 >>> columnExprs = map(lambda c: rtrim(ltrim(col(c))).alias(c),df.columns)
  

Применить columnExprs в select

 df.select(*columnExprs).show()