我有一个DataFrame如下
profDF
+---+------------+---------+------+
| ID| Name| Occ|Salary|
+---+------------+---------+------+
| 1| James|Detective| 30000|
| 2| Victor| Salesman| 50000|
| 3| Doris| CEO| 20000|
+---+------------+---------+------+
我想添加一个新列,其中包含每个人的最高工资和薪水之间的差异。
+---+------------+---------+------+-------+
| ID| Name| Occ|Salary|DiffMax|
+---+------------+---------+------+-------+
| 1| James|Detective| 30000| 20000|
| 2| Victor| Salesman| 50000| 0|
| 3| Doris| CEO| 20000| 30000|
+---+------------+---------+------+-------+
执行此操作的一种方法是通过执行groupBy("ID")
和max
创建另一个DF,然后将此DF与persDF
加入“ID”,但groupBy
不会给我所有行的最大工资。
另一种方法是使用withColumn("DiffMax", ...)
。但我似乎无法找到withColumn
的第二个参数,它会给我所需的结果。
有人可以帮我吗?我正在使用Spark-1.6.0
答案 0 :(得分:4)
这是一种做法。找到max
薪水,然后使用withColumn
查找现有薪资与此max
薪资之间的差异。
val maxSalary = profDF.agg(max(profDF("Salary"))).first().get(0)
profDF.withColumn("DiffMax", lit(maxSalary) - profDF("Salary")).show()
//output
+---+------+---------+------+-------+
| ID| Name| Occ|Salary|DiffMax|
+---+------+---------+------+-------+
| 1| James|Detective| 30000|20000.0|
| 2|Victor| Salesman| 50000| 0.0|
| 3| Doris| CEO| 20000|30000.0|
+---+------+---------+------+-------+