将序列号添加到数据框中的每一行 - Spark Scala

时间:2018-03-27 04:02:53

标签: apache-spark hive

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

任何想法我们如何通过spark scala中的数据框来实现这一目标。

实施例

下面是表格中的现有数据:

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

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

3,33,5000

我们需要在每次向表中插入新数据时获取行ID,方法是从表中获取max(row_id)并向其添加+1。

请提出任何想法。

谢谢,

1 个答案:

答案 0 :(得分:1)

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

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()

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