pyspark数据预处理
pyspark数据预处理主要用到的是pyspark.ml.feature
1、拿到数据首先需要了解各特征的属性,是连续变量、分类变量,还是布尔变量,可以用df.dtypes初步查看,我的经验是df.dtypes结合各特征不同值个数一起看。不同值个数为1的,一般都是全部为缺失值,这种特种可以剔除(或者检查是否为取数逻辑错误);不同值个数为2,一般为布尔变量,也存在空值和一个不同特征值的现象,需要展开变量具体分析是保留还是删除;不同值个数小于20(可以视实际情况定)个的,按分类变量处理;不同值个数大于20个,但df.dtypes为string的,此时需要看是否要重新分类,或者本身是连续变量,但type有误,此时需要cast转换数据类型;不同值个数大于20个,dt.dtypes不为string的可以看看是否为时间,时间的话,可以转化为连续变量处理,其余可以当做连续变量处理
2、变量分成连续变量、分类变量、布尔变量后,接着对连续变量分桶
pyspark.ml.feature.QuantileDiscretizer
(
numBuckets=2
,
inputCol=None
,
outputCol=None
,
relativeError=0.001
,
handleInvalid='error'
)
在分桶之前不需要先补缺失值,并且 handleInvalid='keep'
3、对分桶后的连续变量(此时也是离散变量)、分类变量、布尔变量补缺失值df.na.fill
4、对变量stringIndexer
pyspark.ml.feature.StringIndexer
(
inputCol=None
,
outputCol=None
,
handleInvalid='error'
,
stringOrderType='frequencyDesc'
)
handleInvalid设置为keep
5、对变量onehot
pyspark.ml.feature.OneHotEncoder
(
dropLast=True
,
inputCol=None
,
outputCol=None
)