使用聚合值将列添加到 DataFrame

Add Column to DataFrame With Aggregated Values

我有一个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,然后在 "ID" 但 [=15] 上与 persDF 加入此 DF =] 不会给我 所有 行的最高薪水。

另一种方法是使用 withColumn("DiffMax", ...)。但我似乎无法找到 withColumn 的第二个参数,它会给我想要的结果。

有人可以帮我解决这个问题吗?我正在使用 Spark-1.6.0

这是一种方法。找到 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|
+---+------+---------+------+-------+