【问题标题】:Add sequence number to every row in a dataframe - Spark Scala向数据框中的每一行添加序列号 - Spark Scala
【发布时间】:2018-03-27 13:06:31
【问题描述】:

我需要在数据框中处理的每一行中添加序列号。但是每次添加时,我们都需要从现有行中获取最大序列并添加 + 1 并将其分配给新行。

知道如何使用 spark scala 中的数据框实现这一点。

示例。

下表是现有数据:

row_id,emp_id, sal
1,11,2000
2,22,3000

现在我需要在表格中添加如下新行:

3,33,5000

每次向表中插入新数据时,我们都需要通过从表中获取 max(row_id) 并为其添加 +1 来获取行 id。

请提出任何想法。

谢谢,

【问题讨论】:

    标签: apache-spark hive


    【解决方案1】:

    Spark DataFrame 是不可变的,因此无法追加/插入行。而是使用联合。这是您的问题的快速解决方案。这不是一个好的解决方案,因为每次添加新行时都需要执行联合。

    val data = spark
      .read
      .option("inferSchema", "true")
      .option("header", "true")
      .csv("data.csv")
    
    data.createOrReplaceTempView("dView")
    val sqld = spark.sql("SELECT MAX(row_id)+1,SUM(emp_id),SUM(sal) FROM dView")
    val finalD = data.union(sqld)
    finalD.show()
    spark.stop()
    

    数据.csv

    row_id,emp_id, sal
    1,11,2000
    2,22,3000
    

    输出:

    +------+------+----+
    |row_id|emp_id| sal|
    +------+------+----+
    |     1|    11|2000|
    |     2|    22|3000|
    |     3|    33|5000|
    +------+------+----+
    

    【讨论】:

    • 感谢您的回复 Binoy J。假设我有一个包含 50 条更新记录和 20 条插入(新记录)的数据框。所有更新记录都将具有 row_id 并且插入记录将没有其中的值。我需要从更新的记录中获取 max(row_id) 并向其添加 1 并添加此值以按顺序插入记录。这可以为上述 senario 实现吗..
    猜你喜欢
    • 2019-03-26
    • 2018-05-10
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-13
    • 1970-01-01
    • 2017-12-13
    相关资源
    最近更新 更多