计算Spark scala

时间:2017-08-14 12:06:39

标签: scala apache-spark

我正在寻找一种计算某些统计数据的方法,例如意味着使用Scala在Spark中的几个选定列。鉴于data对象是我的Spark DataFrame,很容易计算一列的平均值,例如。

data.agg(avg("var1") as "mean var1").show

此外,我们可以轻松地计算一些其他列的值的平均交叉表,例如:

data.groupBy("category").agg(avg("var1") as "mean_var1").show

但是,我们如何计算DataFrame中列的列表的平均值?我尝试过运行这样的东西,但它不起作用:

scala> data.select("var1", "var2").mean().show
<console>:44: error: value mean is not a member of org.apache.spark.sql.DataFrame
       data.select("var1", "var2").mean().show
                                   ^

2 个答案:

答案 0 :(得分:4)

这是你需要做的事情

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

import spark.implicits._
val df1 = Seq((1,2,3), (3,4,5), (1,2,4)).toDF("A", "B", "C")

data.select(data.columns.map(mean(_)): _*).show()

输出:

+------------------+------------------+------+
|            avg(A)|            avg(B)|avg(C)|
+------------------+------------------+------+
|1.6666666666666667|2.6666666666666665|   4.0|
+------------------+------------------+------+

这适用于选定的列

data.select(Seq("A", "B").map(mean(_)): _*).show()

输出:

+------------------+------------------+
|            avg(A)|            avg(B)|
+------------------+------------------+
|1.6666666666666667|2.6666666666666665|
+------------------+------------------+

希望这有帮助!

答案 1 :(得分:0)

如果您已经有了数据集,则可以执行以下操作:

ds.describe(s"age")

哪个会返回:

    summary age  
    count   10.0 
    mean    53.3   
    stddev  11.6
    min     18.0
    max     92.0