Apache spark 向数据帧中的每一行添加序列号-Spark Scala
我需要向数据帧中处理的每一行添加序列号。但每次我添加时,我们都需要从现有行中获取序列的最大值,然后添加+1并将其分配给新行 你知道我们如何用spark scala中的dataframe实现这一点吗 例如 以下是表格中的现有数据: 现在我需要向表中添加新行,如下所示: 每次向表中插入新数据时,我们都需要通过从表中获取max(row_id)并向其中添加+1来获取row id 请提出任何意见Apache spark 向数据帧中的每一行添加序列号-Spark Scala,apache-spark,hive,Apache Spark,Hive,我需要向数据帧中处理的每一行添加序列号。但每次我添加时,我们都需要从现有行中获取序列的最大值,然后添加+1并将其分配给新行 你知道我们如何用spark scala中的dataframe实现这一点吗 例如 以下是表格中的现有数据: 现在我需要向表中添加新行,如下所示: 每次向表中插入新数据时,我们都需要通过从表中获取max(row_id)并向其中添加+1来获取row id 请提出任何意见 谢谢,Spark数据帧是不可变的,因此无法追加/插入行。相反,使用union。这里有一个快速解决你问题的方法。
谢谢,Spark数据帧是不可变的,因此无法追加/插入行。相反,使用union。这里有一个快速解决你问题的方法。这不是一个好的解决方案,因为每次添加新行时都需要执行并集
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|
+------+------+----+
感谢您的回复Binoy J。假设我有一个包含50条更新记录和20条插入(新记录)的数据框。所有更新记录都将具有row_id,而插入记录中不包含该值。我需要从更新的记录中获取max(row_id)并向其中添加1,然后添加此值以按顺序插入记录。是否可以为上述senario实现此功能。。
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|
+------+------+----+