• 大三寒假学习进度笔记(二十一)—— 聚类与SparkSQL入门


    写在前面

    今天主要学习了SparkSQL的基础概念,然后学习了一下机器学习中的聚类。

    机器学习部分

    聚类,就是将一组数据中集中相似的样本进行分类。属于机器学习中的无监督学习方法(没有目标值y)。今天主要学习了一下K-Means算法。K-Means算法是聚类中一个十分常见的算法。

    最后,通过Python自己实现了一个K-Means算法。

    Spark部分

    今天学习了一下SparkSQL的简单入门,首先导入依赖:

            <dependency>
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-sql_2.12</artifactId>
                <version>3.0.1</version>
            </dependency>
    

    我这里使用的是3.0.1的Spark。
    然后就可以开始使用SparkSQL了:

    /**
     * @Description:
     * @author: LiuGe
     * @date: 2021/1/30
     */
    object Spark01_SparkSQL_Basic {
    
      def main(args: Array[String]): Unit = {
    
        // 创建SparkSQL的运行环境
        val sparkConf = new SparkConf().setMaster("local[*]").setAppName("sparkSQL")
        val spark = SparkSession.builder().config(sparkConf).getOrCreate()
        import spark.implicits._
        // 执行逻辑操作
        // RDD
    
        // DataFrame
    //    val df: DataFrame = spark.read.json("datas/user.json")
    //    df.show()
    
        // DataFrame => SQL
    //    df.createOrReplaceTempView("user")
    //    spark.sql("select * from user").show()
    //    spark.sql("select age from user").show()
    //    spark.sql("select avg(age) from user").show()
    
        // DataFrame => DSL
        // 在使用DataFrame时,如果涉及到转换操作,需要引入转换规则
    
    //    df.select("age","username").show()
    //    df.select($"age" + 1).show()
    //    df.select('age + 1).show()
    
        // DataSet
        // DataFrame其实是特定泛型的DataSet
    //    val seq = Seq(1,2,3,4)
    //    val ds: Dataset[Int] = seq.toDS()
    //    ds.show()
    
        // RDD <=> DataFrame
        val rdd = spark.sparkContext.makeRDD(List((1,"zhangsan",30),(2,"lisi",40)))
        val df: DataFrame = rdd.toDF("id", "name", "age")
        val rowRDD: RDD[Row] = df.rdd
    
        // DataFrame <=> DataSet
        val ds: Dataset[User] = df.as[User]
        val df1: DataFrame = ds.toDF()
        // RDD <==> DataSet
        val ds1: Dataset[User] = rdd.map {
          case (id, name, age) => {
            User(id, name = name, age = age)
          }
        }.toDS()
        val userRDD: RDD[User] = ds1.rdd
        // 关闭
        spark.close()
      }
      case class User(id:Int,name:String,age:Int)
    }
    

    这里涉及几个核心概念:DataSet、DataFrame:

    DataFrame: 在 Spark 中,DataFrame 是一种以 RDD 为基础的分布式数据集,类似于传统数据库中的二维表格。DataFrame 与 RDD 的主要区别在于,前者带有 schema 元信息,即 DataFrame所表示的二维表数据集的每一列都带有名称和类型。这使得 Spark SQL 得以洞察更多的结构信息,从而对藏于 DataFrame 背后的数据源以及作用于 DataFrame 之上的变换进行了针对性的优化,最终达到大幅提升运行时效的的目标。反观 RDD,由于无从得知所存数据元素的具体内部结构,Spark Core 只能在 stage 层面进行简单、通用的流水线优化。

    DataSet: DataSet 是分布式数据集合。DataSet 是 Spark 1.6 中添加的一个新抽象,是 DataFrame的一个扩展。它提供了 RDD 的优势(强类型,使用强大的 lambda 函数的能力)以及 Spark SQL优化执行引擎的优点。DataSet 也可以使用功能性的转换(操作 map,flatMap,filter等等)

    总的来说,这就是Spark抽象出的两个方便我们进行操作的概念,理解起来难度还是不是很大的

    总结

    今天主要学习了SparkSQL以及机器学习中的聚类。

  • 相关阅读:
    微信小程序代码大全
    【活动发布】捷微H5-微信新年砍价活动,开源发布了
    小程序官网CMS开源项目出炉,Weixin-App-CMS 1.0 版本正式发布
    jeecg开源项目的IDEA的部署
    1024程序员节宅男节日快乐 -- JAVA快速开发平台,JEECG 3.8宅男优化版本发布
    微信小程序商城开源项目,Weixin-App-Shop 1.0 版本正式发布!!!
    JEECG-Swagger UI的使用说明
    JEECG 上传插件升级-代码生成器
    Why 0.1 + 0.2 === 0.30000000000000004 ?
    linux (一)
  • 原文地址:https://www.cnblogs.com/wushenjiang/p/14350711.html
Copyright © 2020-2023  润新知