我的数据框的列为Col_A , Col_B , label
。
Col_A
和Col_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
答案 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