我正在寻找一种计算某些统计数据的方法,例如意味着使用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
^
答案 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