首页 > 解决方案 > 如何在火花数据框中插入一个新列,其值从 m 到 n,其中 m 和 n 可以在 Pyspark 中单独选择?

问题描述

我想在我预先存在的数据框中插入一个新列,我实际上想将其用作键。我想自己选择密钥的第一个值,并且密钥将延伸到数据报的长度,请注意,我希望这些值是连续的。例如 :

--------------
|    Name    |
--------------
|     A      |
|     B      |
|     C      |
|     D      |
--------------

转换后的数据框:

-------------------------
|    Name    | df_key   |
-------------------------
|     A      |   60     |
|     B      |   61     |
|     C      |   62     |
|     D      |   63     |
-------------------------

在上面的例子中:我希望 60 成为一个变量,其余的键应该延伸到 Dataframe 的长度。

标签: apache-sparkpysparkapache-spark-sql

解决方案


通过订购来使用row_number窗口功能monotonically_increasing_id

Example:

df.show()
#+----+
#|Name|
#+----+
#|   A|
#|   B|
#|   C|
#|   D|
#+----+

from pyspark.sql.window import *
from pyspark.sql.functions import *
w=Window.orderBy(monotonically_increasing_id())
constant=60
df.withColumn("df_key", constant + row_number().over(w)).show()
#+----+------+
#|Name|df_key|
#+----+------+
#|   A|    60|
#|   B|    61|
#|   C|    62|
#|   D|    63|
#+----+------+

推荐阅读