【问题标题】:Add Column to DataFrame With Aggregated Values使用聚合值将列添加到 DataFrame
【发布时间】:2018-02-02 14:36:21
【问题描述】:

我有一个如下的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”上使用persDF 加入这个DF,但groupBy 不会给我所有行。

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

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

【问题讨论】:

    标签: scala apache-spark spark-dataframe


    【解决方案1】:

    这是一种方法。找到 max Salary,然后使用 withColumn 找出现有 Salary 与此 max Salary 之间的差异。

    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|
    +---+------+---------+------+-------+
    

    【讨论】:

      猜你喜欢
      • 2015-08-11
      • 2018-08-21
      • 2019-11-02
      • 1970-01-01
      • 1970-01-01
      • 2017-03-10
      • 2020-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多