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))
为了加快你在这种情况下的计算速度
- 将你的数据放入 DataFrame(不是 RDD)
- 按照@user7757642
的建议,使用矢量化操作(不是使用 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))
您好,我正在使用自定义 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))
为了加快你在这种情况下的计算速度
- 将你的数据放入 DataFrame(不是 RDD)
- 按照@user7757642 的建议,使用矢量化操作(不是使用 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))