为PySpark DataFrame生成N行重复数字

3
我希望在PySpark DataFrame中创建一个新列,其中N个重复的行号与数据帧中的其他列无关。
原始数据:
name year 
A   2010
A   2011
A   2011
A   2013
A   2014
A   2015
A   2016
A   2018
B   2018
B   2019

我想要一个新列,其中包含重复的行号,假设N=3。

期望输出:

name year  rownumber
A   2010   1
A   2011   1
A   2011   1
A   2013   2
A   2014   2
A   2015   2
A   2016   3
A   2018   3
B   2018   3
B   2019   4
1个回答

3

您可以尝试使用行号与除法:

n=3
df.withColumn("rounum",
   ((F.row_number().over(Window.orderBy(F.lit(0)))-1)/n).cast("Integer")+1).show()

+----+----+------+
|name|year|rounum|
+----+----+------+
|   A|2010|     1|
|   A|2011|     1|
|   A|2011|     1|
|   A|2013|     2|
|   A|2014|     2|
|   A|2015|     2|
|   A|2016|     3|
|   A|2018|     3|
|   B|2018|     3|
|   B|2019|     4|
+----+----+------+

请问您能解释一下这段代码的逻辑吗?((F.row_number().over(Window.orderBy(F.lit(0)))-1)/n).cast("Integer")+1).show() - Addy
@Addy,我们从行号中减去1,然后使用“floor”除法类似于“np.arange(10)//3”,然后加上1以从1开始分组,就像预期的那样。 - anky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接