我有一个类似以下的数据:
Col1,col2,col3 a,1,# b,2,$ c,3,%
我需要创建一个以col2为键、col3为值的新列,如下所示:
Col1,col2,col3,col4 a,1,#,{1:#} b,2,$,{2:$} c,3,%,{4:%}
如何使用pyspark实现这一点?
zujrkrfu1#
尝试 format_string :
format_string
import pyspark.sql.functions as F df2 = df.withColumn('col4', F.format_string('{%d:%s}', 'col2', 'col3')) df2.show() +----+----+----+-----+ |Col1|col2|col3| col4| +----+----+----+-----+ | a| 1| #|{1:#}| | b| 2| $|{2:$}| | c| 3| %|{3:%}| +----+----+----+-----+
如果您想要键值关系,Map可能更合适:
df2 = df.withColumn('col4', F.create_map('col2', 'col3')) df2.show() +----+----+----+--------+ |Col1|col2|col3| col4| +----+----+----+--------+ | a| 1| #|[1 -> #]| | b| 2| $|[2 -> $]| | c| 3| %|[3 -> %]| +----+----+----+--------+
您还可以将Map转换为json字符串,类似于预期的输出:
df2 = df.withColumn('col4', F.to_json(F.create_map('col2', 'col3'))) df2.show() +----+----+----+---------+ |Col1|col2|col3| col4| +----+----+----+---------+ | a| 1| #|{"1":"#"}| | b| 2| $|{"2":"$"}| | c| 3| %|{"3":"%"}| +----+----+----+---------+
1条答案
按热度按时间zujrkrfu1#
尝试
format_string
:如果您想要键值关系,Map可能更合适:
您还可以将Map转换为json字符串,类似于预期的输出: