【问题标题】:How to create a column of row id in Spark dataframe for each distinct column value using Scala如何使用 Scala 在 Spark 数据框中为每个不同的列值创建行 ID 列
【发布时间】:2019-02-23 22:54:21
【问题描述】:

我在 scala spark 中有一个数据框

类别 |分数 |

一个 | 0.2

一个 | 0.3

一个 | 0.3

B | 0.9

B | 0.8

B | 1

我想 添加行 id 列为

类别 |分数 |行号

一个 | 0.2 | 0

一个 | 0.3 | 1

一个 | 0.3 | 2

B | 0.9 | 0

B | 0.8 | 1

B | 1 | 2

基本上,我希望行 id 对于列类别中的每个不同值单调递增。我已经有一个排序的数据框,因此具有相同类别的所有行都分组在一起。但是,我仍然不知道如何生成新类别出现时重新启动的row_id。请帮忙!

【问题讨论】:

    标签: scala apache-spark azure-data-factory


    【解决方案1】:

    这是Window 聚合函数的一个很好的用例

    import org.apache.spark.sql.expressions.Window
    import org.apache.spark.sql.functions.row_number
    import df.sparkSession.implicits._
    
    val window = Window.partitionBy('category).orderBy('score)
    df.withColumn("row-id", row_number.over(window))
    

    窗口函数的工作方式有点像groupBy,除了不是每个group 返回单个值,而是每个组中的每个row 返回单个值。在这种情况下,该值是该行在同一类别的行组 的位置。此外,如果这是您想要达到的效果,那么您不需要事先对列 category 进行预排序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-22
      • 1970-01-01
      • 1970-01-01
      • 2020-06-13
      • 1970-01-01
      相关资源
      最近更新 更多