2

Salut J'utilise une fonction UDF personnalisée pour prendre la racine carrée de chaque valeur dans chaque colonne.Spark ML: Prise de racine carrée de colonnes de fonction

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

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

Existe-t-il un moyen plus rapide de le faire? La fonction d'expansion polynomiale ne convient pas dans ce cas.

Répondre

2

N'utilisez pas la fonction UDF. Au lieu d'utiliser intégré:

from pyspark.sql.functions import sqrt 

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

Afin d'accélérer votre calcul dans ce cas

  1. mettre vos données dans un dataframe (non RDD)
  2. utilisation Opérations vectorisée (non lambda- opérations avec UDF), comme suggéré par @ user7757642

ceci est un exemple si vous dataTraining est un RDD puis

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))