我需要为数据帧中处理的每一行添加序列号。但每次添加时,我们都需要从现有行中获取最大序列并添加+ 1并将其分配给新行。
任何想法我们如何通过spark scala中的数据框来实现这一目标。
实施例
row_id,emp_id, sal
1,11,2000
2,22,3000
3,33,5000
我们需要在每次向表中插入新数据时获取行ID,方法是从表中获取max(row_id)并向其添加+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|
+------+------+----+