最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入了解SparkSQL的運用及方法

 更新時間:2022年03月30日 11:42:31   作者:那人獨釣寒江雪.  
SparkSQL就是將SQL轉(zhuǎn)換成一個任務(wù),提交到集群上運行,類似于Hive的執(zhí)行方式。本文給大家分享了SparkSQl的運用及方法,感興趣的朋友跟隨小編一起看看吧

一:SparkSQL

1.SparkSQL簡介

Spark SQL是Spark的一個模塊,用于處理結(jié)構(gòu)化的數(shù)據(jù),它提供了一個數(shù)據(jù)抽象DataFrame(最核心的編程抽象就是DataFrame),并且SparkSQL作為分布式SQL查詢引擎。
Spark SQL就是將SQL轉(zhuǎn)換成一個任務(wù),提交到集群上運行,類似于Hive的執(zhí)行方式。

2.SparkSQL運行原理

將Spark SQL轉(zhuǎn)化為RDD,然后提交到集群執(zhí)行。

3.SparkSQL特點

(1)容易整合,Spark SQL已經(jīng)集成在Spark中

(2)提供了統(tǒng)一的數(shù)據(jù)訪問方式:JSON、CSV、JDBC、Parquet等都是使用統(tǒng)一的方式進行訪問

(3)兼容 Hive

(4)標準的數(shù)據(jù)連接:JDBC、ODBC

二、SparkSQL運用

package sql

import org.apache.avro.ipc.specific.Person
import org.apache.spark
import org.apache.spark.rdd.RDD
import org.apache.spark.sql
import org.apache.spark.sql.catalyst.InternalRow
import org.apache.spark.sql.{DataFrame, Dataset, Row, SparkSession}
import org.junit.Test

class Intro {
  @Test
  def dsIntro(): Unit ={
    val spark: SparkSession = new sql.SparkSession.Builder()
      .appName("ds intro")
      .master("local[6]")
      .getOrCreate()

    //導(dǎo)入隱算是shi轉(zhuǎn)換
    import spark.implicits._

    val sourceRDD: RDD[Person] =spark.sparkContext.parallelize(Seq(Person("張三",10),Person("李四",15)))
    val personDS: Dataset[Person] =sourceRDD.toDS();
//personDS.printSchema()打印出錯信息

    val resultDS: Dataset[Person] =personDS.where('age>10)
      .select('name,'age)
      .as[Person]
    resultDS.show()

  }
  @Test
  def dfIntro(): Unit ={
    val spark: SparkSession =new SparkSession.Builder()
      .appName("ds intro")
      .master("local")
      .getOrCreate()

    import spark.implicits._
    val sourceRDD: RDD[Person] = spark.sparkContext.parallelize(Seq(Person("張三",10),Person("李四",15)))
    val df: DataFrame = sourceRDD.toDF()//隱shi轉(zhuǎn)換

    df.createOrReplaceTempView("person")//創(chuàng)建表
    val resultDF: DataFrame =spark.sql("select name from person where age>=10 and age<=20")
    resultDF.show()

  }
  @Test
  def database1(): Unit ={
    //1.創(chuàng)建sparkSession
    val spark: SparkSession =new SparkSession.Builder()
      .appName("database1")
      .master("local[6]")
      .getOrCreate()
      //2.導(dǎo)入引入shi子轉(zhuǎn)換
    import spark.implicits._

    //3.演示
    val sourceRDD: RDD[Person] =spark.sparkContext.parallelize(Seq(Person("張三",10),Person("李四",15)))
    val dataset: Dataset[Person] =sourceRDD.toDS()

    //Dataset 支持強類型的API
    dataset.filter(item => item.age >10).show()
    //Dataset 支持若弱類型的API
    dataset.filter('age>10).show()
    //Dataset 可以直接編寫SQL表達式
    dataset.filter("age>10").show()
  }

  @Test
  def database2(): Unit ={
    val spark: SparkSession = new SparkSession.Builder()
      .master("local[6]")
      .appName("database2")
      .getOrCreate()
    import spark.implicits._

    val dataset: Dataset[Person] =spark.createDataset(Seq(Person("張三",10),Person("李四",20)))
    //無論Dataset中放置的是什么類型的對象,最終執(zhí)行計劃中的RDD上都是internalRow
    //直接獲取到已經(jīng)分析和解析過得Dataset的執(zhí)行計劃,從中拿到RDD
    val executionRdd: RDD[InternalRow] =dataset.queryExecution.toRdd

    //通過將Dataset底層的RDD通過Decoder轉(zhuǎn)成了和Dataset一樣的類型RDD
    val typedRdd:RDD[Person] = dataset.rdd

    println(executionRdd.toDebugString)
    println()
    println()
    println(typedRdd.toDebugString)
  }

  @Test
  def database3(): Unit = {
    //1.創(chuàng)建sparkSession
    val spark: SparkSession = new SparkSession.Builder()
      .appName("database1")
      .master("local[6]")
      .getOrCreate()
    //2.導(dǎo)入引入shi子轉(zhuǎn)換
    import spark.implicits._

    val dataFrame: DataFrame = Seq(Person("zhangsan", 15), Person("lisi", 20)).toDF()
    //3.看看DataFrame可以玩出什么花樣
    //select name from...
    dataFrame.where('age > 10)
      .select('name)
      .show()
  }
//  @Test
//  def database4(): Unit = {
//    //1.創(chuàng)建sparkSession
//    val spark: SparkSession = new SparkSession.Builder()
//      .appName("database1")
//      .master("local[6]")
//      .getOrCreate()
//    //2.導(dǎo)入引入shi子轉(zhuǎn)換
//    import spark.implicits._
//    val personList=Seq(Person("zhangsan",15),Person("lisi",20))
//
//    //1.toDF
//    val df1: DataFrame =personList.toDF()
//    val df2: DataFrame =spark.sparkContext.parallelize(personList).toDF()
//      //2.createDataFrame
//    val df3: DataFrame =spark.createDataFrame(personList)
//
//    //3.read
//    val df4: DataFrame =spark.read.csv("")
//    df4.show()
//  }
  //toDF()是轉(zhuǎn)成DataFrame,toDs是轉(zhuǎn)成Dataset
  //  DataFrame就是Dataset[Row] 代表弱類型的操作,Dataset代表強類型的操作,中的類型永遠是row,DataFrame可以做到運行時類型安全,Dataset可以做到 編譯時和運行時都安全
@Test
def database4(): Unit = {
  //1.創(chuàng)建sparkSession
  val spark: SparkSession = new SparkSession.Builder()
    .appName("database1")
    .master("local[6]")
    .getOrCreate()
  //2.導(dǎo)入引入shi子轉(zhuǎn)換
  import spark.implicits._
  val personList=Seq(Person("zhangsan",15),Person("lisi",20))
  //DataFrame代表弱類型操作是編譯時不安全
  val df: DataFrame =personList.toDF()

  //Dataset是強類型的
  val ds: Dataset[Person] =personList.toDS()
  ds.map((person:Person) =>Person(person.name,person.age))
}
  @Test
  def row(): Unit ={
    //1.Row如何創(chuàng)建,它是什么
    //row對象必須配合Schema對象才會有列名
    val p: Person =Person("zhangsan",15)
    val row: Row =Row("zhangsan",15)
    //2.如何從row中獲取數(shù)據(jù)
    row.getString(0)
    row.getInt(1)
    //3.Row也是樣例類、
    row match {
      case Row(name,age) => println(name,age)
    }
  }

}
case class Person(name: String, age: Int)

到此這篇關(guān)于深入了解SparkSQL的運用及方法的文章就介紹到這了,更多相關(guān)SparkSQL運用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring MVC整合Shiro權(quán)限控制的方法

    Spring MVC整合Shiro權(quán)限控制的方法

    這篇文章主要介紹了Spring MVC整合Shiro權(quán)限控制,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • OPENCV+JAVA實現(xiàn)人臉識別

    OPENCV+JAVA實現(xiàn)人臉識別

    這篇文章主要為大家詳細介紹了OPENCV+JAVA實現(xiàn)人臉識別,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • MybatisPlus實現(xiàn)數(shù)據(jù)權(quán)限隔離的示例詳解

    MybatisPlus實現(xiàn)數(shù)據(jù)權(quán)限隔離的示例詳解

    Mybatis Plus對Mybatis做了無侵入的增強,非常的好用,今天就給大家介紹它的其中一個實用功能:數(shù)據(jù)權(quán)限插件,感興趣的可以跟隨小編一起了解下
    2024-04-04
  • java SSLContext創(chuàng)建方式

    java SSLContext創(chuàng)建方式

    這篇文章主要介紹了java SSLContext創(chuàng)建方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Java中對于雙屬性枚舉的使用案例

    Java中對于雙屬性枚舉的使用案例

    今天小編就為大家分享一篇關(guān)于Java中對于雙屬性枚舉的使用案例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • java  基礎(chǔ)知識之IO總結(jié)

    java 基礎(chǔ)知識之IO總結(jié)

    這篇文章主要介紹了java 基礎(chǔ)知識之IO總結(jié)的相關(guān)資料,Java中的I/O分為兩種類型,一種是順序讀取,一種是隨機讀取,需要的朋友可以參考下
    2017-03-03
  • java高效打印一個二維數(shù)組的實例(不用遞歸,不用兩個for循環(huán))

    java高效打印一個二維數(shù)組的實例(不用遞歸,不用兩個for循環(huán))

    下面小編就為大家?guī)硪黄猨ava高效打印一個二維數(shù)組的實例(不用遞歸,不用兩個for循環(huán))。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Java的lambda表達式實現(xiàn)解析

    Java的lambda表達式實現(xiàn)解析

    這篇文章主要為大家詳細介紹了Java的lamda表達式實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 聊聊Spring Boot 如何集成多個 Kafka

    聊聊Spring Boot 如何集成多個 Kafka

    這篇文章主要介紹了Spring Boot 集成多個 Kafka的相關(guān)資料,包括配置文件,生成者和消費者配置過程,本文通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2023-10-10
  • Java數(shù)據(jù)結(jié)構(gòu)之單鏈表詳解

    Java數(shù)據(jù)結(jié)構(gòu)之單鏈表詳解

    在之前的學(xué)習(xí)中,我們主要了解了很多 Java 的 基本語法,但是在之后的 Java學(xué)習(xí)中,了解基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)的知識非常重要,數(shù)據(jù)結(jié)構(gòu)的思想可以幫助我們更加清晰明白的了解 Java 的解題思路等等.今天我們就來開始學(xué)習(xí)實現(xiàn)一個Java基礎(chǔ)的單鏈表,需要的朋友可以參考下
    2021-05-05

最新評論

山东| 宝应县| 贡山| 曲松县| 扶绥县| 横峰县| 岱山县| 保德县| 营山县| 绍兴县| 乌兰县| 遵义县| 武川县| 荔浦县| 务川| 蛟河市| 怀化市| 磐安县| 天峨县| 海城市| 九江县| 沾益县| 收藏| 宜兴市| 田东县| 广南县| 苏尼特右旗| 吉林市| 泰兴市| 崇明县| 锦州市| 长海县| 汪清县| 固镇县| 三明市| 嘉鱼县| 安顺市| 奉节县| 邻水| 和平县| 息烽县|