我有一个数据框(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中实现它?
谢谢。
答案 0 :(得分:3)
要使用条件句,可以使用函数when
import org.apache.spark.sql.functions.when
mydf.withColumn("myVar", when($"F3" > 3, $"F4").otherwise(0.0))
但是我不知道你想累加什么,因为按行只有一个F4值
编辑
如果您想先进行汇总,则可以执行groupBy
和agg
,如下所示:
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))