2017-07-03 30 views
0

如說()函數: https://databricks.com/blog/2015/06/02/statistical-and-mathematical-functions-with-dataframes-in-spark.html描述了行,而不是列

describe()函數適用於每個數字列,這是可能做到這一點對行?我的DF尺寸是53 cols和346,143行,所以轉置不是一個選項。我該怎麼做?

我使用Spark 2.11

+0

所以,你要統計(最小值,最大值,平均值等)對所有列1排?然後,創建一個scala函數(用於數據集)或UDF(DataFrame),它可以進行所需的計算 –

回答

0

你可以做自己的UDF。要麼你做一個單獨的UDF每個數量或把一切都放在1 UDF返回複雜結果:

val df = Seq(
    (1.0,2.0,3.0,4.0,5.0) 
).toDF("x1","x2","x3","x4","x5") 


val describe = udf(
    { xs : Seq[Double] => 

    val xmin = xs.min 
    val xmax = xs.max 
    val mean = xs.sum/xs.size.toDouble 

    (xmin,xmax,mean) 
    } 
) 

df 
.withColumn("describe",describe(array("*"))) 
.withColumn("min",$"describe._1") 
.withColumn("max",$"describe._2") 
.withColumn("mean",$"describe._3") 
.drop($"describe") 
.show 

給出:

+---+---+---+---+---+---+---+----+ 
| x1| x2| x3| x4| x5|min|max|mean| 
+---+---+---+---+---+---+---+----+ 
|1.0|2.0|3.0|4.0|5.0|1.0|5.0| 3.0| 
+---+---+---+---+---+---+---+----+ 
+0

udf函數僅支持11列,OP表示53列。你必須解釋如何處理53個cols。 –

+1

@RameshMaharjan這也適用於超過11列(我測試過),因爲UDF只有1個參數 –

+0

是的你是對的。我的錯誤,我沒有注意到。 ;) 謝謝 –