标准化RDD

时间:2014-12-12 17:23:24

标签: scala apache-spark rdd apache-spark-sql

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

  1. 计算每个col的平均值和sd
  2. 对于每个col,从每个条目中减去列平均值,并将结果除以列sd
  3. 这可以高效且轻松地完成(无需在任何阶段将RDD转换为双数组)吗?

    谢谢和问候,

1 个答案:

答案 0 :(得分: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)
  }