标准化RDD

lea*_*ark 1 scala apache-spark rdd apache-spark-sql

假设我有一个双打的RDD,我想按如下方式"标准化"它:

  1. 计算每个col的平均值和sd
  2. 对于每个col,从每个条目中减去列平均值,并将结果除以列sd

这可以高效,轻松地完成(无需在任何阶段将RDD转换为双数组)吗?

感谢致敬,

Eug*_*nev 5

您可以使用Spark本身的StandardScaler

/**
 * Standardizes features by removing the mean and scaling to unit variance 
 * using column summary
 */

  import org.apache.spark.mllib.feature.StandardScaler
  import org.apache.spark.mllib.linalg.Vector
  import org.apache.spark.rdd.RDD

  val data: RDD[Vector] = ???
  val scaler = new StandardScaler(true, true).fit(data)

  data.foreach { vector =>
    val scaled = scaler.transform(vector)
  }
Run Code Online (Sandbox Code Playgroud)