国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

spark第四章:SparkSQL基本操作

這篇具有很好參考價(jià)值的文章主要介紹了spark第四章:SparkSQL基本操作。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

系列文章目錄

spark第一章:環(huán)境安裝
spark第二章:sparkcore實(shí)例
spark第三章:工程化代碼
spark第四章:SparkSQL基本操作


前言

接下來(lái)我們學(xué)習(xí)SparkSQL他和Hql有些相似。Hql是將操作裝換成MR,SparkSQL也是,不過(guò)是使用Spark引擎來(lái)操作,效率更高一些


一、添加pom

<dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_2.12</artifactId>
            <version>3.2.3</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-hive_2.12</artifactId>
            <version>3.2.3</version>

以上是這次博客需要的所有依賴(lài),一次性全加上。

二、常用操作

spark第四章:SparkSQL基本操作
一共這么多,挨個(gè)講解一下

1.類(lèi)型轉(zhuǎn)換

SparkSQL中有三種常用的類(lèi)型,RDD之前說(shuō)過(guò)就不說(shuō)了。
DataFrame
Spark SQL 的 DataFrame API 允許我們使用 DataFrame 而不用必須去注冊(cè)臨時(shí)表或者生成 SQL 表達(dá)式。DataFrame API 既有 transformation 操作也有 action 操作。
DSL 語(yǔ)法
DataFrame 提供一個(gè)特定領(lǐng)域語(yǔ)言(domain-specific language, DSL)去管理結(jié)構(gòu)化的數(shù)據(jù)??梢栽?Scala, Java, Python 和 R 中使用 DSL,使用 DSL 語(yǔ)法風(fēng)格不必去創(chuàng)建臨時(shí)視圖了

SparkSql_Basic.scala

package com.atguigu.bigdata.spark.sql

import org.apache.spark.SparkConf
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{DataFrame, Dataset, Row, SparkSession}

object SparkSql_Basic {
  def main(args: Array[String]): Unit = {
    // 創(chuàng)建SparkSQL的運(yùn)行環(huán)境
    val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("sparkSql")
    val spark: SparkSession = SparkSession.builder().config(sparkConf).getOrCreate()
    import spark.implicits._

//    val df: DataFrame = spark.read.json("datas/user.json")
//    df.show()

    //DataFrame => SQL
//    df.createOrReplaceTempView("user")
//    spark.sql("select age from user").show()


    //DtaFrame => DSL
    // 在使用DataFrame時(shí),如何涉及到轉(zhuǎn)換操作,需要引入轉(zhuǎn)換規(guī)則

//    df.select("age","username").show()
//    df.select($"age"+1).show()
//    df.select('age+1).show()

    // DataSet
    // DataFrame 是特定泛型的DataSet
//    val seq: Seq[Int] = 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 <=> DatsSet
    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, age)
      }
    }.toDS()

    val userRDD: RDD[User] = ds1.rdd


    // 關(guān)閉環(huán)境
    spark.close()

  }

  case class User(id:Int,name:String,age:Int)

}

2.連接mysql

SparkSQL提供了多種數(shù)據(jù)接口,我們可以通過(guò)JDBC連接Mysql數(shù)據(jù)庫(kù),我們先隨便在數(shù)據(jù)庫(kù)里邊寫(xiě)點(diǎn)東西。
spark第四章:SparkSQL基本操作
SparkSql_JDBC.scala

package com.atguigu.bigdata.spark.sql

import org.apache.spark.SparkConf
import org.apache.spark.sql.{DataFrame, SaveMode, SparkSession}

object SparkSql_JDBC {
  def main(args: Array[String]): Unit = {
    // 創(chuàng)建SparkSQL的運(yùn)行環(huán)境
    val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("sparkSql")
    val spark: SparkSession = SparkSession.builder().config(sparkConf).getOrCreate()
    import spark.implicits._

    val df: DataFrame = spark.read
      .format("jdbc")
      .option("url", "jdbc:mysql://hadoop102:3306/spark-sql")
      .option("driver", "com.mysql.jdbc.Driver")
      .option("user", "root")
      .option("password", "000000")
      .option("dbtable", "user")
      .option("useSSL","false")
      .load()

    df.show

    df.write
      .format("jdbc")
      .option("url", "jdbc:mysql://hadoop102:3306/spark-sql")
      .option("driver", "com.mysql.jdbc.Driver")
      .option("user", "root")
      .option("password", "000000")
      .option("dbtable", "user1")
      .option("useSSL","false")
      .mode(SaveMode.Append)
      .save()

    // 關(guān)閉環(huán)境
    spark.close()
  }
}

spark第四章:SparkSQL基本操作

spark第四章:SparkSQL基本操作

3.UDF函數(shù)

這個(gè)函數(shù)可以對(duì)簡(jiǎn)單的數(shù)據(jù)進(jìn)行處理,但是比較局限.
這次我們從json文件讀取數(shù)據(jù)
spark第四章:SparkSQL基本操作

{"username": "zhangsan", "age": 20}
{"username": "lisi", "age": 30}
{"username": "wangwu", "age": 40}

SparkSql_UDF.scala

package com.atguigu.bigdata.spark.sql

import org.apache.spark.SparkConf
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{DataFrame, Dataset, Row, SparkSession}

object SparkSql_UDF {
  def main(args: Array[String]): Unit = {
    // 創(chuàng)建SparkSQL的運(yùn)行環(huán)境
    val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("sparkSql")
    val spark: SparkSession = SparkSession.builder().config(sparkConf).getOrCreate()
    import spark.implicits._

    val df: DataFrame = spark.read.json("datas/user.json")
    df.createOrReplaceTempView("user")

    spark.udf.register("prefixName",(name:String)=>{
      "Name:" + name
    })

    spark.sql("select age ,prefixName(username) from user").show()

    // 關(guān)閉環(huán)境
    spark.close()
  }
}

spark第四章:SparkSQL基本操作

4.UDAF函數(shù)

UDAF函數(shù)的處理能力就比UDF強(qiáng)大多了,可以完成一些更復(fù)雜的操作.
SparkSql_UDAF1.scala

package com.atguigu.bigdata.spark.sql

import org.apache.spark.SparkConf
import org.apache.spark.sql.expressions.Aggregator
import org.apache.spark.sql.types.{DataType, LongType, StructField, StructType}
import org.apache.spark.sql.{DataFrame, Encoder, Encoders, Row, SparkSession, functions}

object SparkSql_UDAF1 {
  def main(args: Array[String]): Unit = {
    // 創(chuàng)建SparkSQL的運(yùn)行環(huán)境
    val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("sparkSql")
    val spark: SparkSession = SparkSession.builder().config(sparkConf).getOrCreate()

    val df: DataFrame = spark.read.json("datas/user.json")
    df.createOrReplaceTempView("user")

    //計(jì)算平均年齡
    spark.udf.register("ageAvg", functions.udaf(new MyAvgUDAF()))

    spark.sql("select ageAvg(age) from user").show()


    // 關(guān)閉環(huán)境
    spark.close()

  }

  case class Buff( var total:Long,var count:Long)

  class MyAvgUDAF extends Aggregator[Long,Buff,Long]{
    //初始值
    override def zero: Buff = {
      Buff(0L,0L)
    }
    //更新緩沖區(qū)
    override def reduce(buff: Buff, in: Long): Buff = {
      buff.total=buff.total+in
      buff.count=buff.count+1
      buff
    }

    //合并緩沖區(qū)
    override def merge(buff1: Buff, buff2: Buff): Buff = {
      buff1.total=buff1.total+buff2.total
      buff1.count=buff1.count+buff2.count
      buff1
    }

    //計(jì)算結(jié)果
    override def finish(buff: Buff): Long = {
      buff.total/buff.count
    }

    //緩沖區(qū)編碼操作
    override def bufferEncoder: Encoder[Buff] = Encoders.product

    //輸出的編碼操作
    override def outputEncoder: Encoder[Long] = Encoders.scalaLong
  }

}

spark第四章:SparkSQL基本操作
還有一種方法,在Spark3已經(jīng)不被官方推薦了,所以這里就不敘述了.

5.連接hive

首先我們?cè)诩合?啟動(dòng)Hadoop和Hive
然后將jdbc的jar包放到hive的lib文件中
spark第四章:SparkSQL基本操作
這個(gè)jar包在安裝Hive環(huán)境時(shí),使用過(guò).
將虛擬機(jī)中的hive配置文件,hive-site.xml導(dǎo)出
spark第四章:SparkSQL基本操作
放到idea的resource文件夾中,然后最好吧target文件夾刪除,因?yàn)閕dea有可能從target中直接讀取之前的數(shù)據(jù),從而沒(méi)有掃描hive-site.xml
spark第四章:SparkSQL基本操作
我們就做最簡(jiǎn)單的查詢(xún)操作
SparkSql_Hive.scala

package com.atguigu.bigdata.spark.sql

import org.apache.spark.SparkConf
import org.apache.spark.sql.{DataFrame, SaveMode, SparkSession}

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

    val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("sparkSql")
    val spark: SparkSession = SparkSession.builder().enableHiveSupport().config(sparkConf).getOrCreate()

    spark.sql("show tables").show

    // 關(guān)閉環(huán)境
    spark.close()

  }

}

spark第四章:SparkSQL基本操作
如果能查詢(xún)hive中的數(shù)據(jù)庫(kù),代表成功.

總結(jié)

SparkSQL的常用操作基本就這些,至于項(xiàng)目嗎,下次專(zhuān)門(mén)在寫(xiě)一次吧文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-465018.html

到了這里,關(guān)于spark第四章:SparkSQL基本操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 操作系統(tǒng)第四章練習(xí)題

    第三部分 填空題 將作業(yè)地址空間中的邏輯地址轉(zhuǎn)換為主存中的物理地址的過(guò)程稱(chēng)為(????? )。地址變換 ? 分區(qū)分配中的存儲(chǔ)保護(hù)通常采用(????? )方法。界限寄存器和存儲(chǔ)保護(hù)鍵 把(????? )地址轉(zhuǎn)換為(????? )地址的工作稱(chēng)為地址映射。邏輯、物理 重定位的

    2024年02月11日
    瀏覽(27)
  • 【王道·操作系統(tǒng)】第四章 文件管理(下)

    【王道·操作系統(tǒng)】第四章 文件管理(下)

    用戶需要通過(guò)操作系統(tǒng)提供的接口發(fā)出上述請(qǐng)求——用戶接口 由于用戶提供的是文件的存放路徑,因此需要操作系統(tǒng)一層一層地查找目錄,找到對(duì)應(yīng)的目錄項(xiàng)——文件目錄系統(tǒng) 不同的用戶對(duì)文件有不同的操作權(quán)限,因此為了保證安全,需要檢查用戶是否有訪問(wèn)權(quán)限——存取

    2024年02月11日
    瀏覽(22)
  • Linux操作系統(tǒng)——第四章 進(jìn)程間通信

    Linux操作系統(tǒng)——第四章 進(jìn)程間通信

    ? ? 目錄 進(jìn)程間通信介紹 進(jìn)程間通信目的 進(jìn)程間通信發(fā)展 進(jìn)程間通信分類(lèi) 管道 System V IPC POSIX IPC 管道 什么是管道 匿名管道 管道讀寫(xiě)規(guī)則 管道特點(diǎn) 命名管道 創(chuàng)建一個(gè)命名管道 匿名管道與命名管道的區(qū)別 命名管道的打開(kāi)規(guī)則 system V共享內(nèi)存 共享內(nèi)存示意圖? 共享內(nèi)存數(shù)

    2024年02月09日
    瀏覽(14)
  • 【考研數(shù)學(xué)】線性代數(shù)第四章 —— 線性方程組(1,基本概念 | 基本定理 | 解的結(jié)構(gòu))

    【考研數(shù)學(xué)】線性代數(shù)第四章 —— 線性方程組(1,基本概念 | 基本定理 | 解的結(jié)構(gòu))

    繼向量的學(xué)習(xí)后,一鼓作氣,把線性方程組也解決了去。O.O 方程組 稱(chēng)為 n n n 元齊次線性方程組。 方程組 稱(chēng)為 n n n 元非齊次線性方程組。 方程組(I)又稱(chēng)為方程組(II)對(duì)應(yīng)的齊次線性方程組或?qū)С龇匠探M。 方程組(I)和方程組(II)分別稱(chēng)為齊次線性方程組和非齊次線

    2024年02月11日
    瀏覽(33)
  • 【軟考數(shù)據(jù)庫(kù)】第四章 操作系統(tǒng)知識(shí)

    【軟考數(shù)據(jù)庫(kù)】第四章 操作系統(tǒng)知識(shí)

    目錄 4.1 進(jìn)程管理 4.1.1 操作系統(tǒng)概述 4.1.2 進(jìn)程組成和狀態(tài) 4.1.3 前趨圖 4.1.4?進(jìn)程同步與互斥 4.1.5?進(jìn)程調(diào)度 4.1.6?死鎖 4.1.7?線程 4.2 存儲(chǔ)管理 4.2.1 分區(qū)存儲(chǔ)管理 4.2.3?分頁(yè)存儲(chǔ)管理 4.2.4?分段存儲(chǔ)管理 4.2.5?段頁(yè)式存儲(chǔ)管理 4.3 設(shè)備管理 4.3.1 設(shè)備管理概述 4.3.2?I/0軟件 4.3.3?設(shè)

    2024年02月06日
    瀏覽(24)
  • 第四章:數(shù)據(jù)操作Ⅰ 第二節(jié):讀寫(xiě)CSV文件

    第四章:數(shù)據(jù)操作Ⅰ 第二節(jié):讀寫(xiě)CSV文件

    使用read.csv函數(shù),可以將CSV文件讀入數(shù)據(jù)框,而使用write.csv()函數(shù),則可以將數(shù)據(jù)框保存到CSV中 我們使用read.csv()的時(shí)候,其會(huì)返回一個(gè)數(shù)據(jù)框 例如: 例如:讀取學(xué)分文件(以下為待讀取文件)? 使用head格式到R語(yǔ)言中取前面數(shù)據(jù)? 使用tail格式到R語(yǔ)言中取后面數(shù)據(jù)? 例如:

    2024年03月08日
    瀏覽(23)
  • Qt5開(kāi)發(fā)及實(shí)例V2.0-第四章Qt基本對(duì)話框

    Qt5開(kāi)發(fā)及實(shí)例V2.0-第四章Qt基本對(duì)話框

    首先介紹標(biāo)準(zhǔn)文件對(duì)話框(QFileDialog)、標(biāo)準(zhǔn)顏色對(duì)話框(QColorDialog)、標(biāo)準(zhǔn)字體對(duì)話框(QFontDialog)、標(biāo)準(zhǔn)輸入對(duì)話框(QInputDialog)及標(biāo)準(zhǔn)消息對(duì)話框(QMessageBox),運(yùn)行效果如圖4.1所示。 按如圖4.1所示依次執(zhí)行如下操作。 (1)單擊“文件標(biāo)準(zhǔn)對(duì)話框?qū)嵗卑粹o,彈出“文

    2024年02月07日
    瀏覽(96)
  • 【操作系統(tǒng)復(fù)習(xí)之路】存儲(chǔ)器管理(第四章 &超詳細(xì)講解)

    【操作系統(tǒng)復(fù)習(xí)之路】存儲(chǔ)器管理(第四章 &超詳細(xì)講解)

    目錄 一、存儲(chǔ)器的層次結(jié)構(gòu) 二、程序的裝入和鏈接 2.1 邏輯地址和物理地址 2.2?絕對(duì)裝入方式 2.3?可重定位裝入方式 2.4?動(dòng)態(tài)運(yùn)行時(shí)裝入方式 2.5 靜態(tài)鏈接? 2.6 裝入時(shí)動(dòng)態(tài)鏈接 2.7 運(yùn)行時(shí)動(dòng)態(tài)鏈接 三、連續(xù)分配存儲(chǔ)器管理方式 3.1?單一連續(xù)分配 3.2?固定分區(qū)分配 3.3?動(dòng)態(tài)分區(qū)

    2024年04月27日
    瀏覽(29)
  • 操作系統(tǒng)考試復(fù)習(xí)——第四章 存儲(chǔ)器管理 4.1 4.2

    操作系統(tǒng)考試復(fù)習(xí)——第四章 存儲(chǔ)器管理 4.1 4.2

    存儲(chǔ)器的層次結(jié)構(gòu): 存儲(chǔ)器的多層結(jié)構(gòu): 存儲(chǔ)器至少分為三級(jí):CPU寄存器,主存和輔存。 但是 一般分為6層 為寄存器,高速緩存,主存儲(chǔ)器,磁盤(pán)緩存,固定磁盤(pán),可移動(dòng)存儲(chǔ)介質(zhì)。 這幾個(gè)部分是 速度依次減小 但是 存儲(chǔ)容量是依次增大 的。 ?只有固定磁盤(pán)和可移動(dòng)存儲(chǔ)

    2024年02月03日
    瀏覽(24)
  • 第四章 應(yīng)用SysML基本特性集的汽車(chē)示例 P1|系統(tǒng)建模語(yǔ)言SysML實(shí)用指南學(xué)習(xí)

    第四章 應(yīng)用SysML基本特性集的汽車(chē)示例 P1|系統(tǒng)建模語(yǔ)言SysML實(shí)用指南學(xué)習(xí)

    僅供個(gè)人學(xué)習(xí)記錄 主要就是應(yīng)用練習(xí)建模了 Automobile Domain包 將模型組織入包的包圖 汽車(chē)規(guī)范中包含系統(tǒng)需求的需求圖 汽車(chē)域塊定義圖 描述車(chē)輛主要功能的用例圖

    2024年02月06日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包