如何在Spark数据框中执行条件“ withColumn”?

时间:2018-11-07 14:17:40

标签: scala apache-spark apache-spark-sql

我有一个数据框(mydf),如下所示:

+---+---+---+---+
| F1| F2| F3| F4|
+---+---+---+---+
|  t| y4|  5|1.0|
|  x|  y|  1|0.5|
|  x|  y|  1|0.5|
|  x|  z|  2|1.0|
|  x|  b|  5|1.0|
|  t| y2|  6|1.0|
|  t| y3|  3|1.0|
|  x|  a|  4|1.0|
+---+---+---+---+

我想在“ withColumn”内进行条件聚合,如下所示:

mydf.withColumn("myVar", if($"F3" > 3) sum($"F4") else 0.0)

对于具有$F3 <= 0的每一行,myVar的值应为0.0,其他值之和为$"F4"

如何在Spark Scala中实现它?

谢谢。

1 个答案:

答案 0 :(得分:3)

要使用条件句,可以使用函数when

import org.apache.spark.sql.functions.when
mydf.withColumn("myVar", when($"F3" > 3, $"F4").otherwise(0.0))

但是我不知道你想累加什么,因为按行只有一个F4值

编辑 如果您想先进行汇总,则可以执行groupByagg,如下所示:

mydf.groupBy("F1", "F2")
.agg(sum("F3").as("F3"), sum("F4").as("F4"))

然后像以前一样添加withColumn句子。

放在一起 :

   mydf.groupBy("F1", "F2")
    .agg(sum("F3").as("F3"), sum("F4").as("F4"))
    .withColumn("myVar", when($"F3" > 3, $"F4").otherwise(0.0))