如何为数据框创建新列,该列的值是由不同列中的值组成的映射?

时间:2019-02-14 20:52:51

标签: pyspark

我也看到过类似的问题,但是却无法准确找到我需要的东西,并且一直在努力弄清楚是否可以在不使用UDF的情况下完成我想做的事情。

说我从这个数据帧开始:

+---+---+---+
| pk|  a|  b|
+---+---+---+
|  1|  2|  1|
|  2|  4|  2|
+---+---+---+ 

我希望生成的数据框看起来像

+----------------+---+
|              ab| pk|
+----------------+---+
|[A -> 2, B -> 1]|  1|
|[A -> 4, B -> 2]|  2|
+----------------+---+

AB是与ab对应的名称(我想我可以用别名来解决这个问题,但是目前我正在使用返回{'A': column a value, 'B': column b value}映射的UDF

是否可以使用create_map来实现此目的,或者没有UDF来实现?

1 个答案:

答案 0 :(得分:1)

create_mapkey, value, key, value ...作为参数,

import pyspark.sql.functions as f
df.select(
  f.create_map(f.lit('A'), f.col('a'), f.lit('B'), f.col('b')).alias('ab'), 
  f.col('pk')
).show()
+----------------+---+
|              ab| pk|
+----------------+---+
|[A -> 2, B -> 1]|  1|
|[A -> 4, B -> 2]|  2|
+----------------+---+