spark dataframe预处理---数据离散化

数据准备,我们根据labels列来离散化

数据长这样
scala> df.show(5)
+--------+------------------+------+
|      R1|                G2|labels|
+--------+------------------+------+
|148.6041|4.1254973506233155|   1.0|
|163.6788|2.8350005837741903|   1.0|
|153.9485|1.8033965176854478|   1.0|
|150.3755|1.5140336026654098|   1.0|
| 150.738|1.6580451019197278|   1.0|
+--------+------------------+------+
only showing top 5 rows

scala> df.groupBy("labels").count.show
+------+-----+                                                                  
|labels|count|
+------+-----+
|   1.0|   51|
|   4.0|   24|
|   3.0|   78|
|   2.0|   44|
|   5.0|    6|
+------+-----+

二元转换,根据阈值,左边数据为0,右边为1

ort org.apache.spark.ml.feature.Binarizer
val result=new Binarizer()//选择二元离散化函数
    .setInputCol("labels")//选择目标列
    .setOutputCol("binarizer_feature")//离散化后的列名
    .setThreshold(3.0)//阈值
    .transform(df)//需要离散化的dataframe
scala> result.show
+--------+------------------+------+-----------------+
|      R1|                G2|labels|binarizer_feature|
+--------+------------------+------+-----------------+
|148.6041|4.1254973506233155|   1.0|              0.0|
|163.6788|2.8350005837741903|   1.0|              0.0|
|153.9485|1.8033965176854478|   1.0|              0.0|
|150.3755|1.5140336026654098|   1.0|              0.0|
| 150.738|1.6580451019197278|   1.0|              0.0|
scala> result.groupBy("binarizer_feature").count.show
+-----------------+-----+                                                       
|binarizer_feature|count|
+-----------------+-----+
|              0.0|  173|
|              1.0|   30|
+-----------------+-----+

多元离散化,例如阈值为1,3,则负无穷到1,1到3,3到正无穷

val thresholdArray=Array[Double](100.0,120.0,130.0,150.0)//设定阈值
val buff=ArrayBuffer.empty[Double]//保存最终阈值
buff+=Double.NegativeInfinity//加入负无穷
for(a<-thresholdArray) buff+=a//加入数据设定的阈值
buff+= Double.PositiveInfinity//加入正无穷
//查看buff
scala> buff
res49: scala.collection.mutable.ArrayBuffer[Double] = ArrayBuffer(-Infinity, 1.0, 3.0, Infinity)

val result=new Bucketizer()//多元离散化函数
    .setInputCol("R1")//选择待处理列
    .setOutputCol("bucketizer_features")
    .setSplits(buff.toArray)//阈值,为Array型
    .transform(df)//需要处理的dataframe

scala> result.groupBy("bucketizer_features").count.show
+-------------------+-----+                                                     
|bucketizer_features|count|
+-------------------+-----+
|                0.0|    2|
|                1.0|   25|
|                4.0|   46|
|                3.0|  100|
|                2.0|   30|
+-------------------+-----+

 

对于Spark DataFrame数据预处理,可以采取以下步骤: 1. 数据加载:使用Spark数据源API(如`spark.read.csv`)加载数据集,创建DataFrame对象。 2. 数据探索:使用DataFrame的方法(如`show`、`describe`、`count`等)查看数据的基本信息,了解数据的结构和内容。 3. 缺失值处理:使用DataFrame的方法(如`na.fill`、`na.drop`等)处理缺失值。可以选择填充缺失值、删除包含缺失值的行/列,或者进行其他自定义的处理。 4. 数据转换:根据具体需求,对数据进行转换。可以使用DataFrame的方法(如`select`、`withColumn`等)选择需要的列,重命名列名,进行类型转换等。 5. 特征工程:根据实际业务需求,进行特征提取和转换。可以使用Spark的内置特征转换器(如`Tokenizer`、`VectorAssembler`等)进行文本分词、向量化等操作。 6. 数据规范化:对数据进行规范化处理,使得不同特征处于同一尺度上。可以使用Spark的内置特征转换器(如`StandardScaler`、`MinMaxScaler`等)进行标准化、归一化等操作。 7. 数据拆分:将数据集拆分为训练集、验证集和测试集,可以使用DataFrame的方法(如`randomSplit`)按比例划分数据。 8. 其他处理:根据实际需求,进行其他必要的数据处理操作,如异常值检测、重复值处理等。 以上是一般的数据预处理步骤,根据具体的业务需求和数据特点,可能需要进行更多的处理操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值