Scala Spark数据帧:计算组之间的差异

Scala Spark数据帧:计算组之间的差异,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,使用R的dplyr,我将计算组间的方差,如下所示: df %>% group_by(group) %>% summarise(total = sum(value)) %>% summarise(variance_between_groups = var(total)) 正在尝试对Sparks DataFrame API执行相同的操作: df.groupBy(group).agg(sum(value).alias("total")).agg(var_samp(total).al

使用R的dplyr,我将计算组间的方差,如下所示:

df %>% group_by(group) %>% summarise(total = sum(value)) %>% summarise(variance_between_groups = var(total))
正在尝试对Sparks DataFrame API执行相同的操作:

df.groupBy(group).agg(sum(value).alias("total")).agg(var_samp(total).alias("variance_between_groups"))
我在第二个
agg
中收到一个错误,说它找不到
total
。我显然误解了一些事情,所以任何帮助都将不胜感激

var_samp()
采用字符串类型的列名,因此需要提供如下字符串:

import org.apache.spark.sql.functions._

val df = Seq(
  ("a", 1.0),
  ("a", 2.5),
  ("a", 1.5),
  ("b", 2.0),
  ("b", 1.6)
).toDF("group", "value")

df.groupBy("group").
  agg(sum("value").alias("total")).
  agg(var_samp("total").alias("variance_between_groups")).
  show
// +-----------------------+                                                       
// |variance_between_groups|
// +-----------------------+
// |     0.9799999999999999|
// +-----------------------+
它还可以采用列(列类型),例如
var\u samp($“total”)
。有关更多详细信息,请参阅Spark's