Масштабирование каждого столбца кадра данных

Я пытаюсь масштабировать каждый столбец данных.

Сначала я конвертирую каждый столбец в вектор, а затем использую мл MinMax Scaler.

Есть ли лучший / более элегантный способ применить одну и ту же функцию к каждому столбцу, кроме простого ее повторения?

import org.apache.spark.ml.linalg.Vectors
import org.apache.spark.ml.linalg.DenseVector
import org.apache.spark.sql.functions.udf
import org.apache.spark.ml.feature.MinMaxScaler
import org.apache.spark.sql.DataFrame

val toVector = udf((vct:Double) => Vectors.dense(Array(vct)) )

val df =  (Seq((1,5,3),(4,2,9),(7,8,6))).toDF("A","B","C")

val dfVec = df.withColumn("AVec",vectorizeDf('A))
            .withColumn("BVec",toVector('B))
            .withColumn("CVec",toVector('C))

def scaler (df:DataFrame,inputCol:String) = new MinMaxScaler()
                            .setInputCol(inputCol)
                            .setOutputCol(inputCol+"Scaled")
                            .setMax(1)
                            .setMin(0)
                            .fit(df)
                            .transform(df)

scaler(scaler(scaler(dfVec,"AVec"),"BVec"),"CVec")

+---+---+---+-----+-----+-----+----------+----------+----------+
|  A|  B|  C| AVec| BVec| CVec|AVecScaled|BVecScaled|CVecScaled|
+---+---+---+-----+-----+-----+----------+----------+----------+
|  1|  5|  3|[1.0]|[5.0]|[3.0]|     [0.0]|     [0.5]|     [0.0]|
|  4|  2|  9|[4.0]|[2.0]|[9.0]|     [0.5]|     [0.0]|     [1.0]|
|  7|  8|  6|[7.0]|[8.0]|[6.0]|     [1.0]|     [1.0]|     [0.5]|
+---+---+---+-----+-----+-----+----------+----------+----------+

Ответы на вопрос(0)

Ваш ответ на вопрос