2017-08-14 513 views
1

我正在尋找一種計算某些統計數據的方法,例如意思是使用Scala在Spark中的幾個選定列。鑑於data對象是我的Spark DataFrame,很容易只計算一列的平均值。計算Spark scala中幾列的平均值

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

另外,我們可以很容易地計算平均交叉列表其他一些列例如: -

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

但我們如何計算平均爲列在數據幀列表的值?我試圖運行這樣的事情,但它沒有工作:

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

這就是你需要做什麼

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| 
+------------------+------------------+ 

希望這有助於!

+0

我知道這種方法,但它不正確。它適用於數據框的所有列。 – simtim

+0

請檢查更新後的答案 –

+0

沒錯!現在它工作得很好。我會接受你的回答。謝謝。 – simtim