Spark Binarizer 连续型数据处理之二值化

1、概念

假设有个需求,我得根据年龄来进行物品推荐,把50以上的人分为老年,50以下分为非老年人,那么我们根据二值化可以很简单的把50以上的定为1,50以下的定为0。
这样就方便我们后续的推荐了。Binarizer就是根据阈值进行二值化,大于阈值的为1.0,小于等于阈值的为0.0

2、code

package com.home.spark.ml

import org.apache.spark.SparkConf
import org.apache.spark.ml.feature.Binarizer
import org.apache.spark.sql.SparkSession

/**
  * @Description:
  * 二进制化是将数字特征阈值化为二进制(0/1)特征的过程。
  * Binarizer采用公共参数inputCol和outputCol以及二进制化的阈值。
  * 大于阈值的特征值将二值化为1.0;等于或小于阈值的值二值化为0.0。
  * InputCol支持Vector和Double类型。
  **/
object Ex_Binarizer {
  def main(args: Array[String]): Unit = {
    val conf: SparkConf = new SparkConf(true).setMaster("local[2]").setAppName("spark ml")
    val spark = SparkSession.builder().config(conf).getOrCreate()

    val data = Array((0, 20.0), (1, 30.0), (2, 55.0),(3, 65.0),(4, 50.0))
    val dataFrame = spark.createDataFrame(data).toDF("id", "feature")

    val binarizer = new Binarizer().setInputCol("feature").setOutputCol("binarized_features").setThreshold(50.0)

    val result = binarizer.transform(dataFrame)

    result.show(false)

    spark.stop()
  }

}

+---+-------+------------------+
|id |feature|binarized_features|
+---+-------+------------------+
|0  |20.0   |0.0               |
|1  |30.0   |0.0               |
|2  |55.0   |1.0               |
|3  |65.0   |1.0               |
|4  |50.0   |0.0               |
+---+-------+------------------+
posted @ 2020-01-17 11:29  我是属车的  阅读(344)  评论(0编辑  收藏  举报