如何在pyspark中的函数中使用变量连接列

如何在pyspark中的函数中使用变量连接列,pyspark,Pyspark,我需要将一列附加到另一列,并编写了一个函数来执行相同的操作: def concat_content(input_df, left_column, right_columns): for col_to_change in right_columns: print(col_to_change) input_df = input_df.withColumn(F.col(col_to_change), F.concat(F.col(left_column), F.

我需要将一列附加到另一列,并编写了一个函数来执行相同的操作:

def concat_content(input_df, left_column, right_columns):
    for col_to_change in right_columns:
        print(col_to_change)
        input_df = input_df.withColumn(F.col(col_to_change), F.concat(F.col(left_column), F.lit(" | "),F.coalesce(F.col(col_to_change), F.lit("None"))))

    return input_df

new_final = concat_content(final, "name_txt", ["group_txt", "sub_group_txt"])
但我得到了一个错误:

TypeError: Column is not iterable
我可以试着解决这个问题吗?

试试这个

def concat_content(input_df, left_column, right_columns):
    for col_to_change in right_columns:
        print(col_to_change)
        input_df = input_df.withColumn(col_to_change, F.concat(F.col(left_column), F.lit(" | "),F.coalesce(F.col(col_to_change), F.lit("None"))))

    return input_df

new_final = concat_content(final, "name_txt", ["group_txt", "sub_group_txt"])


With column将字符串作为第一个参数,而不是列。

withColumn
需要字符串作为第一个参数,即列名。所以,不要把你的第一个参数,
col\u to\u change
用F.col包装起来,你应该会没事的。这能回答你的问题吗?谢谢你,雷恩,整理好了!