我正在使用pyspark,并且有一个数据框df_001,其中包含N列“ rec”,“ id”和“ NAME”。
如果我想添加新列'unq_id',例如,它将连接'rec'和'id'。 当我这样做时,它会完美运行:
df_f_final = df_001.withColumn('unq_id', sf.concat(sf.col('rec'), sf.lit('||'), sf.col('id'))) .
但是我需要创建列列表以连接动态(例如列表): 我怎样才能做到这一点 ? 例如,创建列表:LL = ['rec','id','NAME']或LL = ['rec','NAME']并使用该列表生成数据帧df_f_final并连接列表LL中的列
我认为这很容易,但是这让我发疯了
感谢您的帮助
答案 0 :(得分:0)
检查一下,让我知道是否有帮助。
#InputDF
# +------+------+
# |rec_id| name|
# +------+------+
# | a1| ricky|
# | b1|sachin|
# +------+------+
LL = ['rec_id', 'name']
df1 = df.withColumn("unq_id_value", F.concat( *[F.concat(F.col(col),F.lit("||")) for col in LL]))
df2 = df1.withColumn("unq_id_value",F.expr("substring(unq_id_value, 1, length(unq_id_value)-2)"))
df2.show()
# +------+------+------------+
# |rec_id| name|unq_id_value|
# +------+------+------------+
# | a1| ricky| a1||ricky|
# | b1|sachin| b1||sachin|
# +------+------+------------+
答案 1 :(得分:0)
谢谢Loka的回答 终于我找到了一个解决方案,它类似于您的解决方案。 我做到了,它正在起作用
cols = ['col1', lit('||'), 'col2', lit('||'), 'col3']
unq_id = sf.udf(lambda cols: "".join([x for x in cols]), StringType())
df.withColumn('unqid', unq_id(sf.array(cols))).show()