首页 > 解决方案 > Pyspark:从特定值开始自动递增

问题描述

我需要在我的数据框中添加一列,该列将递增 1,但从 500 开始。所以第一行是 500,第二行是 501,依此类推。使用 UDF 没有意义,因为它可以在不同的工人,我不知道任何将起始值作为参数的函数。我也没有任何东西可以对我的数据框进行排序。默认情况下,行号和自动增量都将从 1 开始。我相信我可以做到,但将我的 df 转换为 rdd 并返回 df 似乎是一个非常丑陋的解决方案。你知道任何现有的函数可以帮助我在数据帧级别上解决问题吗?

谢谢!

标签: pythonpysparkdatabricks

解决方案


由于monotonically_increasing_id()不是连续的,您可以使用row_num()overmonotonically_increasing_id()并添加 499。

from pyspark.sql.window import Window

df = df.withColumn("idx", monotonically_increasing_id())
w = Window().orderBy("idx")
df.withColumn("row_num", (499 + row_number().over(w))).show()

推荐阅读