IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> spark ml基于dataframe的api -> 正文阅读

[大数据]spark ml基于dataframe的api

spark ml基于dataframe的线性回归

官网:https://spark.apache.org/docs/2.4.5/ml-guide.html

1、使用线性回归预测boston房价

package com.yyds.tags.ml.regression

import org.apache.spark.ml.linalg
import org.apache.spark.ml.linalg.Vectors
import org.apache.spark.ml.regression.LinearRegression
import org.apache.spark.sql.{DataFrame, Dataset, SparkSession}
import org.apache.spark.storage.StorageLevel

/**
 * 使用线性回归预测boston房价
 */
object BostonRegression {
  def main(args: Array[String]): Unit = {


    val spark: SparkSession = SparkSession.builder()
      .appName(this.getClass.getSimpleName.stripSuffix("$"))
      .master("local[4]")
      .config("spark.sql.shuffle.partitions",4)
      .getOrCreate()

    import spark.implicits._


    // TODO step1 -> 读取数据

    val houseDS: Dataset[String] =  spark.read
      .textFile("datas/housing/housing.data")
        .filter(line => null != line && line.trim.split("\\s+").length == 14)

    val frame: DataFrame = houseDS.mapPartitions {
      iter =>
        iter.map {
          line =>
            val parts = line.trim.split("\\s+")
            // 获取标签
            val label: Double = parts(parts.length - 1).toDouble
            // 获取特征
            val features: linalg.Vector = Vectors.dense(parts.dropRight(1).map(_.toDouble))
            (features, label)
        }
    }.toDF("features", "label")

    frame.printSchema()
    frame.show(10,truncate = false)

    // TODO step2 -> 划分训练集
    val Array(trainingDF,testingDF) = frame.randomSplit(Array(0.8,0.2))

    trainingDF.persist(StorageLevel.MEMORY_AND_DISK).count() // 触发



    // TODO step3 -> 训练模型
    val lr = new LinearRegression()
      // 设置特征列名称  和  标签列名称
      .setFeaturesCol("features")
      .setLabelCol("label")
      .setStandardization(true) // 标准化
      // 设置超参数
      .setMaxIter(20)  // 迭代次数
      .setSolver("auto") // 设置正规方程 还是  拟牛顿法l-bfgs

    val lrModel = lr.fit(trainingDF)


    // TODO step4 -> 模型评估
    println("coefficients = " + lrModel.coefficients)
    println("intercept = " + lrModel.intercept)
    val trainingSummary = lrModel.summary
    val rootMeanSquaredError = trainingSummary.rootMeanSquaredError
    println("rootMeanSquaredError = " + rootMeanSquaredError)


    // TODO step5 -> 模型预测

    lrModel.transform(testingDF).show(10,truncate = false)


    // 休眠
    Thread.sleep(10000000L)
    spark.stop()

  }

}

2、读取鸢尾花数据集数据,封装特征值features 和 标签处理label

package com.yyds.tags.ml.features

import org.apache.spark.ml.classification.LogisticRegression
import org.apache.spark.ml.feature.{StandardScaler, StringIndexer, VectorAssembler}
import org.apache.spark.sql.{DataFrame, SparkSession}
import org.apache.spark.sql.types.{DoubleType, StringType, StructType}

/**
 * 读取鸢尾花数据集数据,封装特征值features  和  标签处理label
 */
object IrisFeaturesDemo {

  def main(args: Array[String]): Unit = {

       val spark: SparkSession = SparkSession.builder()
         .appName(this.getClass.getSimpleName.stripSuffix("$"))
         .master("local[4]")
         .config("spark.sql.shuffle.partitions",4)
         .getOrCreate()

      import spark.implicits._

    // TODO step1 -> 读取数据
    val isrsSchema: StructType = new StructType()
      .add("sepal_length",DoubleType,nullable = true)
      .add("sepal_width",DoubleType,nullable = true)
      .add("petal_length",DoubleType,nullable = true)
      .add("petal_width",DoubleType,nullable = true)
      .add("category",StringType, nullable = true)

     val isrsDF: DataFrame =  spark.read
          .option("sep",",")
          // 当首行不是列名称时候,需要自动设置schema
          .option("header","false")
          .option("inferSchema","false")
          .schema(isrsSchema)
          .csv("datas/iris/iris.data")

    isrsDF.printSchema()
    isrsDF.show(10,truncate = false)


    // TODO step2 -> 封装特征
    val assembler: VectorAssembler = new VectorAssembler()
      .setInputCols(isrsDF.columns.dropRight(1))
      .setOutputCol("features")

    val df = assembler.transform(isrsDF)


//    df1.printSchema()
//    df1.show(10,truncate = false)


    // TODO step3 -> 标签数值化
    val indexer = new StringIndexer()
      .setInputCol("category") // 对哪一列进行索引化
      .setOutputCol("label") // 数据索引化后的列名称

    val indexedDF: DataFrame = indexer
                   .fit(df)
                   .transform(df)

    indexedDF.printSchema()
    indexedDF.show(10,truncate = false)



    // TODO step4 -> 特征归一化、正则化、标准化
    val scaler = new StandardScaler()
      .setInputCol("features")
      .setOutputCol("scaled_features")
      .setWithStd(true)
      .setWithMean(false)

    // Compute summary statistics by fitting the StandardScaler.
    val scalerModel = scaler.fit(indexedDF)

    // Normalize each feature to have unit standard deviation.
    val scaledDataDF: DataFrame = scalerModel.transform(indexedDF)


    scaledDataDF.printSchema()
    scaledDataDF.show(100,truncate = false)


    // TODO step5 -> 选择分类算法,构建分类模型
    val lr: LogisticRegression = new LogisticRegression()
      // 设置特征列名称  和  标签列名称
      .setFeaturesCol("scaled_features")
      .setLabelCol("label")
      // 设置超参数
        .setMaxIter(20)  // 迭代次数
        .setStandardization(false)
        .setFamily("multinomial") // 二分类  还是  多分类


    // TODO step6 -> 训练模型
    val lrModel = lr.fit(scaledDataDF)


    // TODO step7 -> 评估模型
    println(s"多分类混淆矩阵: ${lrModel.coefficientMatrix}")

    // 休眠
    Thread.sleep(10000000L)
    spark.stop()

  }
}

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 20:57:41  更:2022-03-21 20:59:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:57:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码