Spark ML:对特征列求平方根

Spark ML: Taking square root of feature columns

您好,我正在使用自定义 UDF 对每列中的每个值求平方根。

square_root_UDF = udf(lambda x: math.sqrt(x), DoubleType())

for x in features:
  dataTraining = dataTraining.withColumn(x, square_root_UDF(x))

有没有更快的方法来完成它?多项式展开函数不适用于这种情况。

不要使用 UDF。而是使用内置的:

from pyspark.sql.functions import sqrt

for x in features:
    dataTraining = dataTraining.withColumn(x, sqrt(x))

为了加快你在这种情况下的计算速度

  1. 将你的数据放入 DataFrame(不是 RDD)
  2. 按照@user7757642
  3. 的建议,使用矢量化操作(不是使用 UDF 的 lambda 操作)

这是一个例子,如果你的 dataTraining 是一个 RDD 那么

from pyspark.sql import SparkSession
from pyspark.sql.functions import sqrt

spark = SparkSession.builder.appName("SessionName") \
      .config("spark.some.config.option", "some_value") \
      .getOrCreate()

df = spark.createDataFrame(dataTraining)

for x in features:
    df = df.withColumn(x, sqrt(x))

要在 Scala 中将 sqrt 结果添加为列,您需要执行以下操作:

import hc.implicits._
import org.apache.spark.sql.functions.sqrt

val dataTraining = dataTraining.withColumn("x_std", sqrt('x_variance))