Spark ML:取特征列的平方根

时间:2017-03-23 14:58:50

标签: apache-spark pyspark apache-spark-mllib apache-spark-ml

您好我使用自定义UDF获取每列中每个值的平方根。

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

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

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

3 个答案:

答案 0 :(得分:2)

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

from pyspark.sql.functions import sqrt

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

为了加快这种情况下的计算

  1. 将您的数据放入DataFrame(而不是RDD)
  2. 使用@ user7757642
  3. 建议的矢量化操作(不是使用UDF进行lambda操作)

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

    Select 
    GLACCT_DESCRIP as "Service Income Account",
    (TOTAL_BALANCE*-1) as "Dollars"
    
    From 
    V_GLACCT_DESCRIP,
    V_GLACCT_CURRENT_BALANCE
    
    Where 
    V_GLACCT_DESCRIP.GLACCT_ID = V_GLACCT_CURRENT_BALANCE.GLACCT_ID
    and V_GLACCT_DESCRIP.GLACCT IN ('495500-215','495510-215','495550-215','495560-215')