sql編程基礎(chǔ)pdfSQL的ApI允許直接使用而不用必須去注冊(cè)臨時(shí)表

2023-11-29    分類: 網(wǎng)站建設(shè)

內(nèi)容

基本介紹

模型和模型是 SQL 提供的兩個(gè)編程抽象。核心編程主要是使用和模型進(jìn)行編程,以及它們之間的關(guān)系和轉(zhuǎn)換。

在 Core 中,如果要執(zhí)行應(yīng)用程序,首先需要構(gòu)建上下文環(huán)境對(duì)象。 SQL其實(shí)可以理解為Core的一種封裝。不僅封裝了模型,還封裝了上下文環(huán)境對(duì)象。

舊版本提供了兩個(gè)SQL查詢起點(diǎn):

是最新的SQL查詢的起點(diǎn),本質(zhì)上是and的組合,所以ApI可以在on上使用,也可以在on上使用。內(nèi)部封裝了,所以計(jì)算實(shí)際上是由.

SQL ApI 允許直接使用,無(wú)需注冊(cè)臨時(shí)表或生成 SQL 表達(dá)式。 ApI 既有操作又有操作。

創(chuàng)建

在SQL中,是創(chuàng)建和執(zhí)行SQL的入口。共有三種創(chuàng)建方式:

(1)由

的數(shù)據(jù)源創(chuàng)建

①進(jìn)入

[xzc@hadoop102 spark-local]$ bin/spark-shell

②查看支持文件創(chuàng)建的數(shù)據(jù)源格式

scala> spark.read.

③在

的bin/data目錄下創(chuàng)建user.json文件

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

④讀取json文件創(chuàng)建

scala> val df = spark.read.json("data/user.json")

⑤顯示結(jié)果

scala> df.show

(2)從RDD轉(zhuǎn)換

在IDEA中開(kāi)發(fā)程序時(shí),如果需要RDD和DF或DS的互操作,需要引入如下代碼:

import spark.implicits._ 

這里不是包名in,而是創(chuàng)建對(duì)象的變量名,所以必須先創(chuàng)建對(duì)象再導(dǎo)入。這里的對(duì)象不能用var聲明,因?yàn)橹恢С忠雟al修飾的對(duì)象。在-中,不需要導(dǎo)入,這個(gè)操作是自動(dòng)完成的。

①在

的bin/data目錄下創(chuàng)建id.txt文件

②讀取txt文件

scala> val idRDD = sc.textFile("data/id.txt") 

③轉(zhuǎn)換并顯示結(jié)果

scala> idRDD.toDF("id").show 

注意:在實(shí)際開(kāi)發(fā)中,RDD一般轉(zhuǎn)換為

scala> case class User(name:String, age:Int) 
scala> sc.makeRDD(List(("zhangsan",30), ("lisi",40))).map(t=>User(t._1, t._2)).toDF.show 

(3)從 Hive 查詢返回

Hive 是 SQL 引擎。 SQL 可以在有或沒(méi)有 Hive 支持的情況下編譯。包含 Hive 支持的 SQL 可以支持 Hive 表訪問(wèn)、UDF(用戶自定義函數(shù))和 Hive 查詢語(yǔ)言(/HQL)等。需要強(qiáng)調(diào)的是,如果要在 SQL 中包含 Hive 庫(kù),則不需要提前安裝Hive。要將 SQL 連接到已部署的 Hive,您必須將 hive-site.xml 復(fù)制到配置文件目錄 ($/conf)。即使沒(méi)有部署Hive,SQL仍然可以運(yùn)行。

下載hive-site.xml文件,需要根據(jù)自己的配置修改個(gè)別內(nèi)容

注意:如果你還沒(méi)有部署Hivesql編程基礎(chǔ) pdf,SQL會(huì)在當(dāng)前工作目錄下創(chuàng)建自己的Hive元數(shù)據(jù)倉(cāng)庫(kù),稱為它。此外,如果您嘗試使用 (not) 語(yǔ)句創(chuàng)建表,這些表將被放置在您默認(rèn)文件系統(tǒng)的 /user/hive/ 目錄中(如果您有一個(gè)完善的 hdfs-site.xml ,則默認(rèn)文件系統(tǒng)為HDFS,否則為本地文件系統(tǒng))。

- Hive 默認(rèn)支持;代碼中默認(rèn)不支持,需要手動(dòng)指定(加個(gè)參數(shù)即可)。

1) 嵌入式 HIVE

如果你使用內(nèi)嵌的Hive,你什么都不用做,直接使用即可。

存儲(chǔ)Hive的元數(shù)據(jù),默認(rèn)倉(cāng)庫(kù)地址:$/-

①展示

scala> spark.sql("show tables").show 

②創(chuàng)建表格

scala> spark.sql("create table aa(id int)") 

③將本地?cái)?shù)據(jù)加載到表格中并顯示

scala> spark.sql("load data local inpath 'data/id.txt' into table aa") 
scala> spark.sql("select * from aa").show 

注意:在實(shí)際使用中,幾乎沒(méi)有人會(huì)使用內(nèi)置的Hive

2)外的HIVE

如果要連接到外部部署的 Hive,則需要執(zhí)行以下步驟:

是強(qiáng)類型數(shù)據(jù)集合,需要提供對(duì)應(yīng)的類型信息。

創(chuàng)建

有兩種創(chuàng)建方式:

(1) with

①創(chuàng)建示例類

scala> case class person(name: String, age: Long) 

②向表格中添加數(shù)據(jù)并顯示

scala> val caseClassDS = Seq(person("zhangsan",2)).toDS() 
scala> caseClassDS.show 

(2)使用基本類型的序列創(chuàng)建

①創(chuàng)建

scala> val ds = Seq(1,2,3,4,5).toDS 

②顯示數(shù)據(jù)

scala> ds.show 

注意:在實(shí)際使用中,很少用于將序列轉(zhuǎn)換成,更多的是通過(guò)RDD獲取

將 RDD 轉(zhuǎn)換為

包含case類的RDD可以自動(dòng)轉(zhuǎn)換為case類定義的結(jié)構(gòu),通過(guò)反射將case類屬性轉(zhuǎn)換為表的列名。 Case 類可以包含復(fù)雜的結(jié)構(gòu),例如 Seq 或 Seq。

scala> case class User(name:String, age:Int) 
scala> sc.makeRDD(List(("zhangsan",30), ("lisi",49))).map(t=>User(t._1, t._2)).toDS 

轉(zhuǎn)換為RDD

其實(shí)也是對(duì)RDD的封裝,所以可以直接獲取內(nèi)部RDD

scala> case class User(name:String, age:Int) 
scala> sc.makeRDD(List(("zhangsan",30), ("lisi",49))).map(t=>User(t._1, t._2)).toDS 
scala> val rdd = res11.rdd 
scala> rdd.collect 

和轉(zhuǎn)化

實(shí)際上是一個(gè)特例,所以它們可以相互轉(zhuǎn)換。

(1)被轉(zhuǎn)換為

scala> case class User(name:String, age:Int)  
scala> val df = sc.makeRDD(List(("zhangsan",30), ("lisi",49))).toDF("name","age") 
scala> val ds = df.as[User] 

(2) 轉(zhuǎn)換為

scala> val ds = df.as[User] 
scala> val df = ds.toDF 

RDD與RDD的關(guān)系

In 為我們提供了兩個(gè)新的抽象,即 and。它們和RDD有什么區(qū)別?首先從版本生成的角度:

如果給這三個(gè)數(shù)據(jù)結(jié)構(gòu)賦予相同的數(shù)據(jù)sql編程基礎(chǔ) pdf,分別計(jì)算后,都會(huì)給出相同的結(jié)果。區(qū)別在于它們的執(zhí)行效率和執(zhí)行方法。在以后的版本中,可能會(huì)逐漸取代RDD,成為唯一的ApI接口。

三者的共同點(diǎn)

(1)RDD,都是平臺(tái)下的分布式彈性數(shù)據(jù)集,為處理超大數(shù)據(jù)提供了便利;

(2)三者都有惰性機(jī)制,創(chuàng)建轉(zhuǎn)換的時(shí)候,比如map方法,不會(huì)立即執(zhí)行,只有遇到比如,三者才會(huì)開(kāi)始遍歷操作;

(3)三者有很多常用的功能,比如,排序等;

(4)很多操作都需要這個(gè)包:.._(創(chuàng)建對(duì)象后嘗試直接導(dǎo)入)

(5)三者會(huì)根據(jù)內(nèi)存情況自動(dòng)緩存操作,這樣即使數(shù)據(jù)量很大也不必?fù)?dān)心內(nèi)存溢出

(6)三個(gè)都有

的概念

(7)和兩者都可以使用模式匹配來(lái)獲取每個(gè)字段的值和類型

三者的區(qū)別

(1)RDD

(2)

(3)

三者相互轉(zhuǎn)換。

分享文章:sql編程基礎(chǔ)pdfSQL的ApI允許直接使用而不用必須去注冊(cè)臨時(shí)表
標(biāo)題路徑:http://www.bm7419.com/news32/297482.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、動(dòng)態(tài)網(wǎng)站、網(wǎng)站收錄軟件開(kāi)發(fā)、移動(dòng)網(wǎng)站建設(shè)、外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)