Python 在pyspark数据帧中进行标准缩放会花费太多时间

Python 在pyspark数据帧中进行标准缩放会花费太多时间,python,pandas,apache-spark,bigdata,Python,Pandas,Apache Spark,Bigdata,我尝试了spark.ml中的标准定标器,其功能如下: def standard_scale_2(df, columns_to_scale): """ Args: df : spark dataframe columns_to_scale : list of columns to standard scale """ from pyspark.ml.feature import Standa

我尝试了spark.ml中的标准定标器,其功能如下:

def standard_scale_2(df, columns_to_scale):
    """
    Args:
    df : spark dataframe
    columns_to_scale : list of columns to standard scale
    """
    from pyspark.ml.feature import StandardScaler
    from pyspark.ml import Pipeline
    from pyspark.ml.feature import VectorAssembler
    from pyspark.ml.functions import vector_to_array
    
    # UDF for converting column type from vector to double type
    unlist = udf(lambda x: round(float(list(x)[0]),3), DoubleType())
    
    # Iterating over columns to be scaled
    for i in columns_to_scale:

      # VectorAssembler Transformation - Converting column to vector type
      assembler = VectorAssembler(inputCols=[i],outputCol=i+"_Vect")

      # MinMaxScaler Transformation
      scaler = StandardScaler(inputCol=i+"_Vect", outputCol=i+"_Scaled")

      # Pipeline of VectorAssembler and MinMaxScaler
      pipeline = Pipeline(stages=[assembler, scaler])

      # Fitting pipeline on dataframe
      df = pipeline.fit(df).transform(df).withColumn(i+"_Scaled", unlist(i+"_Scaled")).drop(i+"_Vect",i).withColumnRenamed(i+"_scaled",i)
    return df
我没有对每一列进行迭代,而是尝试一次缩放所有列,但也没有成功

我也尝试过使用这个简单的udf进行标准缩放:

for column in columns_to_standard_scale:
         sdf = sdf.withColumn(column,
                       F.col(column) / sdf.agg(stddev_samp(column)).first()[0])
         print(column, " completed")
我使用的spark cluster在databricks中具有c5d.2xlarge(16 gb内存8核)节点(最多30个节点)。
spark数据帧的大小只有100k。 我需要缩放大约90列。 但每列的缩放时间大约为10分钟,当我尝试一次性缩放所有列时,脚本甚至在2小时后也没有完成。 但是,使用sklearn标准定标器,熊猫中的相同数据帧几乎不需要2分钟

我不认为代码或数据帧有任何问题,但我遗漏了一些造成瓶颈的东西,并且这个简单的操作花费了太多的时间