pyspark-如何分组并创建键值对列

aamkag61  于 2021-07-13  发布在  Spark
关注(0)|答案(1)|浏览(283)

我有一个类似以下的数据:

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实现这一点?

zujrkrfu

zujrkrfu1#

尝试 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":"%"}|
+----+----+----+---------+

相关问题