在Pyspark中如何向DataFrame添加一列具有递增值?

13

我有一个叫做'df'的数据框,如下所示:

+-------+-------+-------+
|  Atr1 |  Atr2 |  Atr3 |
+-------+-------+-------+
|   A   |   A   |   A   |
+-------+-------+-------+
|   B   |   A   |   A   |
+-------+-------+-------+
|   C   |   A   |   A   |
+-------+-------+-------+

我想添加一个新列,并给它增量值,得到下面更新后的DataFrame:

+-------+-------+-------+-------+
|  Atr1 |  Atr2 |  Atr3 |  Atr4 |
+-------+-------+-------+-------+
|   A   |   A   |   A   |   1   |
+-------+-------+-------+-------+
|   B   |   A   |   A   |   2   |
+-------+-------+-------+-------+
|   C   |   A   |   A   |   3   |
+-------+-------+-------+-------+

我该怎么获得它?

1个回答

13

如果你只需要增量值(比如ID),并且没有约束条件要求数字必须连续,那么你可以使用monotonically_increasing_id()。使用此函数的唯一保证是每行的值将会增加,但是这些值本身在每次执行时可能不同。

from pyspark.sql.functions import monotonically_increasing_id

df.withColumn("Atr4", monotonically_increasing_id())

1
谢谢!好的解决方案! - jartymcfly
请注意,此答案确实回答了问题,但需要注意的是,由于示例指定了一个“类似于以下”的数据框,因此人们可能会认为该示例将扩展到无限数量的连续数字,但是 monotonically_increasing_id() 不会生成连续的数字,只会生成单调递增的数字,因此假设在更大的数据框中会失效。 - Jomonsugi
@Jomonsugi:没错。我强调了答案的这一部分,以使这个限制更加明显。 - Shaido

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