2023-11-29 分類: 網站建設
內容
基本介紹
模型和模型是 SQL 提供的兩個編程抽象。核心編程主要是使用和模型進行編程,以及它們之間的關系和轉換。
在 Core 中,如果要執行應用程序,首先需要構建上下文環境對象。 SQL其實可以理解為Core的一種封裝。不僅封裝了模型,還封裝了上下文環境對象。
舊版本提供了兩個SQL查詢起點:
是最新的SQL查詢的起點,本質上是and的組合,所以ApI可以在on上使用,也可以在on上使用。內部封裝了,所以計算實際上是由.
SQL ApI 允許直接使用,無需注冊臨時表或生成 SQL 表達式。 ApI 既有操作又有操作。
創建
在SQL中,是創建和執行SQL的入口。共有三種創建方式:
(1)由
的數據源創建
①進入
[xzc@hadoop102 spark-local]$ bin/spark-shell
②查看支持文件創建的數據源格式
scala> spark.read.
③在
的bin/data目錄下創建user.json文件
{"username": "zhangsan","age":20}
{"username": "lisi", "age":30}
{"username": "wangwu", "age":40}
④讀取json文件創建
scala> val df = spark.read.json("data/user.json")
⑤顯示結果
scala> df.show
(2)從RDD轉換
在IDEA中開發程序時,如果需要RDD和DF或DS的互操作,需要引入如下代碼:
import spark.implicits._
這里不是包名in,而是創建對象的變量名,所以必須先創建對象再導入。這里的對象不能用var聲明,因為只支持引入val修飾的對象。在-中,不需要導入,這個操作是自動完成的。
①在
的bin/data目錄下創建id.txt文件
②讀取txt文件
scala> val idRDD = sc.textFile("data/id.txt")
③轉換并顯示結果
scala> idRDD.toDF("id").show
注意:在實際開發中,RDD一般轉換為
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 可以在有或沒有 Hive 支持的情況下編譯。包含 Hive 支持的 SQL 可以支持 Hive 表訪問、UDF(用戶自定義函數)和 Hive 查詢語言(/HQL)等。需要強調的是,如果要在 SQL 中包含 Hive 庫,則不需要提前安裝Hive。要將 SQL 連接到已部署的 Hive,您必須將 hive-site.xml 復制到配置文件目錄 ($/conf)。即使沒有部署Hive,SQL仍然可以運行。
下載hive-site.xml文件,需要根據自己的配置修改個別內容
注意:如果你還沒有部署Hivesql編程基礎 pdf,SQL會在當前工作目錄下創建自己的Hive元數據倉庫,稱為它。此外,如果您嘗試使用 (not) 語句創建表,這些表將被放置在您默認文件系統的 /user/hive/ 目錄中(如果您有一個完善的 hdfs-site.xml ,則默認文件系統為HDFS,否則為本地文件系統)。
- Hive 默認支持;代碼中默認不支持,需要手動指定(加個參數即可)。
1) 嵌入式 HIVE
如果你使用內嵌的Hive,你什么都不用做,直接使用即可。
存儲Hive的元數據,默認倉庫地址:$/-
①展示
scala> spark.sql("show tables").show
②創建表格
scala> spark.sql("create table aa(id int)")
③將本地數據加載到表格中并顯示
scala> spark.sql("load data local inpath 'data/id.txt' into table aa")
scala> spark.sql("select * from aa").show
注意:在實際使用中,幾乎沒有人會使用內置的Hive
2)外的HIVE
如果要連接到外部部署的 Hive,則需要執行以下步驟:
是強類型數據集合,需要提供對應的類型信息。
創建
有兩種創建方式:
(1) with
①創建示例類
scala> case class person(name: String, age: Long)
②向表格中添加數據并顯示
scala> val caseClassDS = Seq(person("zhangsan",2)).toDS()
scala> caseClassDS.show
(2)使用基本類型的序列創建
①創建
scala> val ds = Seq(1,2,3,4,5).toDS
②顯示數據
scala> ds.show
注意:在實際使用中,很少用于將序列轉換成,更多的是通過RDD獲取
將 RDD 轉換為
包含case類的RDD可以自動轉換為case類定義的結構,通過反射將case類屬性轉換為表的列名。 Case 類可以包含復雜的結構,例如 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
轉換為RDD
其實也是對RDD的封裝,所以可以直接獲取內部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
和轉化
實際上是一個特例,所以它們可以相互轉換。
(1)被轉換為
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) 轉換為
scala> val ds = df.as[User]
scala> val df = ds.toDF
RDD與RDD的關系
In 為我們提供了兩個新的抽象,即 and。它們和RDD有什么區別?首先從版本生成的角度:
如果給這三個數據結構賦予相同的數據sql編程基礎 pdf,分別計算后,都會給出相同的結果。區別在于它們的執行效率和執行方法。在以后的版本中,可能會逐漸取代RDD,成為唯一的ApI接口。
三者的共同點
(1)RDD,都是平臺下的分布式彈性數據集,為處理超大數據提供了便利;
(2)三者都有惰性機制,創建轉換的時候,比如map方法,不會立即執行,只有遇到比如,三者才會開始遍歷操作;
(3)三者有很多常用的功能,比如,排序等;
(4)很多操作都需要這個包:.._(創建對象后嘗試直接導入)
(5)三者會根據內存情況自動緩存操作,這樣即使數據量很大也不必擔心內存溢出
(6)三個都有
的概念
(7)和兩者都可以使用模式匹配來獲取每個字段的值和類型
三者的區別
(1)RDD
(2)
(3)
三者相互轉換。
分享文章:sql編程基礎pdfSQL的ApI允許直接使用而不用必須去注冊臨時表
標題路徑:http://m.newbst.com/news32/297482.html
成都網站建設公司_創新互聯,為您提供標簽優化、動態網站、網站收錄、軟件開發、移動網站建設、外貿建站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯
猜你還喜歡下面的內容