如何将顺序递增的列添加到从 n (PySpark) 开始的 spark 数据帧?
How to add a sequentially incrementing column to spark data frame that starts at n (PySpark)?
我有一个数据框,其值例如
-------------
| col1 | col2 |
-------------
| a | 2 |
| b | 3 |
| c | 4 |
| d | 5 |
-------------
我想创建第三列,该列的值从指定数字开始自动递增。
假设我希望数字从 5 开始,那么预期的输出应该是
--------------------
| col1 | col2 | col3 |
|--------------------|
| a | 2 | 5 |
| b | 3 | 6 |
| c | 4 | 7 |
| d | 5 | 8 |
--------------------
我试过monotonically_increasing_id()
,但由于分区的缘故,它没有给出序号,而且它也没有从指定编号开始的功能。
我正在使用 Spark 2.4.5 和 Pyspark (python)。
我们可以使用 window 函数 row_number
和 orderby()
(用于全局排序)子句并添加 4
从 5
[= 开始序列19=]
In Pyspark:
Using row_number():
from pyspark.sql.window import Window
from pyspark.sql.functions import *
df=spark.createDataFrame([('a',2),('b',3),('c',4),('d',5)],['col1','col2']).repartition(4)
w=Window.orderBy('col2')
df.withColumn("col3",row_number().over(w) + 4).show()
#+----+----+----+
#|col1|col2|col3|
#+----+----+----+
#| a| 2| 5|
#| b| 3| 6|
#| c| 4| 7|
#| d| 5| 8|
#+----+----+----+
In Scala:
val w = Window.orderBy("col2")
df.withColumn("col3", row_number().over(w) + 4).show()
//+----+----+----+
//|col1|col2|col3|
//+----+----+----+
//| a| 2| 5|
//| b| 3| 6|
//| c| 4| 7|
//| d| 5| 8|
//+----+----+----+
我有一个数据框,其值例如
-------------
| col1 | col2 |
-------------
| a | 2 |
| b | 3 |
| c | 4 |
| d | 5 |
-------------
我想创建第三列,该列的值从指定数字开始自动递增。
假设我希望数字从 5 开始,那么预期的输出应该是
--------------------
| col1 | col2 | col3 |
|--------------------|
| a | 2 | 5 |
| b | 3 | 6 |
| c | 4 | 7 |
| d | 5 | 8 |
--------------------
我试过monotonically_increasing_id()
,但由于分区的缘故,它没有给出序号,而且它也没有从指定编号开始的功能。
我正在使用 Spark 2.4.5 和 Pyspark (python)。
我们可以使用 window 函数 row_number
和 orderby()
(用于全局排序)子句并添加 4
从 5
[= 开始序列19=]
In Pyspark:
Using row_number():
from pyspark.sql.window import Window
from pyspark.sql.functions import *
df=spark.createDataFrame([('a',2),('b',3),('c',4),('d',5)],['col1','col2']).repartition(4)
w=Window.orderBy('col2')
df.withColumn("col3",row_number().over(w) + 4).show()
#+----+----+----+
#|col1|col2|col3|
#+----+----+----+
#| a| 2| 5|
#| b| 3| 6|
#| c| 4| 7|
#| d| 5| 8|
#+----+----+----+
In Scala:
val w = Window.orderBy("col2")
df.withColumn("col3", row_number().over(w) + 4).show()
//+----+----+----+
//|col1|col2|col3|
//+----+----+----+
//| a| 2| 5|
//| b| 3| 6|
//| c| 4| 7|
//| d| 5| 8|
//+----+----+----+