使用聚合值将列添加到 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|
+---+------+---------+------+-------+
我有一个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|
+---+------+---------+------+-------+