从使用pyspark获得的数据帧缩放数据

时间:2019-03-06 23:00:54

标签: python pandas apache-spark dataframe pyspark

我正在尝试缩放csv文件中的某些数据。我正在用pyspark进行此操作以获得比例部分的数据框和sklearn。这是代码:

from sklearn import preprocessing
import numpy as np
import pyspark

from pysparl.sql import SparkSession

spark = SparkSession.builder.getOrCreate()

df = spark.read.option('header','true').csv('flights,csv')
X_scaled = preprocessing.scale(df)

如果我使用大熊猫制作数据框,则比例尺部分没有任何问题,但是使用电火花我会收到此错误:

ValueError: setting an array element with a sequence.

所以我猜测pandas和pyspark之间的元素类型不同,但是如何与pyspark一起使用来进行缩放?

2 个答案:

答案 0 :(得分:1)

sklearn与pandas数据框一起使用。因此,您必须将spark数据框转换为pandas数据框。

X_scaled = preprocessing.scale(df.toPandas())

答案 1 :(得分:0)

您可以使用“ pyspark.ml.feature”中的“ StandardScaler”方法。附加示例脚本以像sklearn一样执行精确的预处理,

步骤1:

from pyspark.ml.feature import StandardScaler

scaler = StandardScaler(inputCol="features", 
                        outputCol="scaled_features",
                        withStd=True,withMean=True)
scaler_model = scaler.fit(transformed_data)
scaled_data = scaler_model.transform(transformed_data)

请记住,在执行步骤1之前,您需要使用VectorAssembler组装所有功能。因此,这将是您的第0步。

from pyspark.ml.feature import VectorAssembler
assembler = VectorAssembler(inputCols=required_features, outputCol='features')
transformed_data = assembler.transform(df)