为PySpark数据帧生成重复的N行编号

为PySpark数据帧生成重复的N行编号,pyspark,apache-spark-sql,pyspark-dataframes,Pyspark,Apache Spark Sql,Pyspark Dataframes,我想在PySpark数据框中创建一个新列,其中包含N个重复的行号,而不考虑数据框中的其他列 原始数据: name year A 2010 A 2011 A 2011 A 2013 A 2014 A 2015 A 2016 A 2018 B 2018 B 2019 我想有一个n重复行数的新列,考虑n=3。< /P> 预期产出: name year rownumber A 2010 1 A 2011 1 A 2011 1 A

我想在PySpark数据框中创建一个新列,其中包含N个重复的行号,而不考虑数据框中的其他列

原始数据:

name year 
A   2010
A   2011
A   2011
A   2013
A   2014
A   2015
A   2016
A   2018
B   2018
B   2019

我想有一个n重复行数的新列,考虑n=3。< /P> 预期产出:

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

您可以尝试使用除法计算行数:

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


你能解释一下逻辑吗?((F.row_number().over(Window.orderBy(F.lit(0)))-1)/n.cast(“Integer”)+1.show()@Addy我们从行号中减去1,然后使用类似于
np.arange(10)//3的除法
floor
,然后我们按预期从1开始添加1。
+----+----+------+
|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|
+----+----+------+