【问题标题】:How could I add a column to a DataFrame in Pyspark with incremental values?如何在 Pyspark 中的 DataFrame 中添加一个具有增量值的列?
【发布时间】:2018-02-23 03:15:36
【问题描述】:

我有一个名为“df”的 DataFrame,如下所示:

+-------+-------+-------+
|  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   |
+-------+-------+-------+-------+

我怎么能得到它?

【问题讨论】:

    标签: python dataframe attributes pyspark increment


    【解决方案1】:

    如果您只需要增量值(如 ID)并且如果没有限制数字必须是连续的,您可以使用monotonically_increasing_id()。使用此函数时唯一的保证是每行的值都会增加,但是,值本身在每次执行时可能会有所不同。

    from pyspark.sql.functions import monotonically_increasing_id
    
    df.withColumn("Atr4", monotonically_increasing_id())
    

    【讨论】:

    • 谢谢!不错的解决方案!
    • 请注意,这个答案实际上确实解决了这个问题,但是应该注意,鉴于该示例指定了一个“如下所示”的数据帧,人们可能会假设该示例将扩展到无限数量的连续数字,但是monotonically_increasing_id() 不会产生连续的数字,只会产生单调递增的数字,因此该假设会随着更大的数据框而失效。
    • @Jomonsugi:没错。我强调了答案的一部分,以使这个约束更加明显。
    猜你喜欢
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 2018-07-03
    • 2018-12-21
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多