为PySpark数据帧生成重复的N行编号
我想在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
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|
+----+----+------+