如何规范化火花数据帧的多个列

时间:2018-06-14 09:58:21

标签: apache-spark dataframe

我的数据框的列为Col_A , Col_B , label

Col_ACol_B的类型为Double,标签为Integer类型。

我如何规范化或标准化Col_A和Col_B(不是"标签"列)(不转换为向量),以便新数据框具有单独的列Col_A_norm,Col_B_norm和label 其中

一行Col_A_norm = (value of a row of Col_A - mean of Col_A)/standard deviation of Col_A

的值

一行Col_B_norm = (value of a row of Col_B - mean of Col_B)/standard deviation of Col_B

的值

1 个答案:

答案 0 :(得分:0)

试试这个例子

val dataFrame = spark.createDataFrame(Seq(
  (0, 1.0, 0.5),
  (1, 2.0, 1.0),
  (2, 4.0, 10.0)
)).toDF("label", "Col_A", "Col_B")

val stat = dataFrame.describe("Col_A", "Col_B")
  .select(col("summary"), col("Col_A").cast("double"), col("Col_B").cast("double"))
  .collect.map(_.toSeq.toArray).transpose.map(x => x.slice(1,3))

dataFrame.select(col("label"), col("Col_A").minus(stat(1)(0)).divide(stat(1)(1)).as("Col_A"),
   col("Col_B").minus(stat(2)(0)).divide(stat(2)(1)).as("Col_B")).show