如何在数据框中创建所有/大多数列的副本

时间:2020-10-25 12:29:51

标签: python pyspark

我想保留原始的一组列,但是使用映射来创建具有更新的列名的副本。 例如,如果原始现有数据框具有列:

'first_name_2020','other_name_2020', 'last_name_2020' 

我想输入参数:

forename = 'first_name_2020'
middlename = 'other_name_2020'
surname = 'last_name_2020'
previous_surname = None

然后输出一个数据框,该数据框具有原始的列集,但还添加了具有标准化命名的这些附加列(包括为缺少的名称字段添加的空列)。列的集合大于三/四,因此我需要遍历列表或字典/映射,而不是键入多个固定宽度的列语句

具有如下数据框:

df_in = spark.sparkContext.parallelize([('JOHN','ANDREW','SMITH'),('JANE','MAY','JONES')]).toDF(['first_name_2020','other_name_2020','last_name_2020'])

想要输出df如下:

df_out = spark.sparkContext.parallelize([('JOHN','ANDREW','SMITH','JOHN','ANDREW','SMITH',''),('JANE','MAY','JONES','JANE','MAY','JONES','')]).toDF(['first_name_2020','other_name_2020','last_name_2020','forename','middlename','surname','previous_surname'])

1 个答案:

答案 0 :(得分:0)

这非常简单,您只需要遍历各列并将其复制到new_column

columns = df.columns
for col_name in columns:
    df = df.withColumn(col_name+”_new”, df[col_name])

最后一个空列

from pyspark.sql.functions import lit

df = df.withColumn(‘previous_surname’, lit(‘’))