一.簡介
通過使用Summarizer提供矢量列【向量、矩陣】彙總統計Dataframe。可用的指標是按列的最大值,最小值,平均值,總和,方差,std和非零數,以及總數。
二.代碼實戰【以均值、方差爲例】
package spark2.ml
import org.apache.log4j.{Level, Logger}
import org.apache.spark.ml.linalg.{Vector, Vectors}
import org.apache.spark.sql.SparkSession
import org.apache.spark.ml.stat.Summarizer._
/**
* Created by Administrator on 2020/7/3.
*/
object MLSummary {
/**
* 設置日誌級別
*/
Logger.getLogger("org").setLevel(Level.WARN)
def main(args: Array[String]) {
val spark = SparkSession
.builder
.appName(s"${this.getClass.getSimpleName}")
.config("spark.driver.maxResultSize", "2G")
.master("local[2]")
.getOrCreate()
import spark.implicits._
val data = Seq(
(Vectors.dense(7.0, 3.0, 4.0), 1.0),
(Vectors.dense(4.0, 6.0, 7.0), 2.0)
)
val df = data.toDF("features", "weight")
/**
* 帶權重的均值、方差計算
*/
val (meanVal, varianceVal) = df.select(metrics("mean", "variance").summary($"features", $"weight").as("summary"))
.select("summary.mean", "summary.variance")
.as[(Vector, Vector)]
.first()
println(meanVal)
println(varianceVal)
/**
* 不帶權重的均值、方差計算
*/
val (meanVal2, varianceVal2) = df.select(mean($"features"), variance($"features"))
.as[(Vector, Vector)]
.first()
println(meanVal2)
println(varianceVal2)
spark.stop()
}
}
三.執行結果及分析
包括以下類型計算:
- mean:包含係數均值的向量。
- variance:包含係數方差的向量。
- count總數:總數。
- numNonzeros:數值類型向量最大非零個數。
- max:最大值。
- min:最小值。
- normL2:每個係數的歐幾里得範數。
- normL1:每個係數的L1範數(絕對值之和)。