Spark SQL

簡介

Spark SQL是Spark用來處理結(jié)構(gòu)化數(shù)據(jù)的一個模塊怀偷,它提供了一個編程抽象叫做DataFrame(底層也是RDD)并且作為分布式SQL查詢引擎的作用。

引入

Hive SQL轉(zhuǎn)換成MapReduce然后提交到集群上執(zhí)行,大大簡化了編寫MapReduce的程序的復(fù)雜性,由于MapReduce這種計算模型執(zhí)行效率比較慢胞枕。所有Spark SQL的應(yīng)運而生,它是將Spark SQL轉(zhuǎn)換成特殊的RDD(DataFrame)娩嚼,然后提交到集群執(zhí)行蘑险,執(zhí)行效率非常快岳悟!



數(shù)據(jù)分析的2種方式:

①:命令式:操作面向過程和算法性的處理,(可以解決非結(jié)構(gòu)化數(shù)據(jù))

②:SQL擅長數(shù)據(jù)分析和通過簡單的語法查詢

總結(jié):SparSQL是一個為了支持SQL而設(shè)計的工具,同時也支持命令式的API

數(shù)據(jù)處理選型(應(yīng)用場景)

Spark 的RDD主要用于處理 非結(jié)構(gòu)和數(shù)據(jù) 和半結(jié)構(gòu)化數(shù)據(jù)

Spark中的SQL主要用于處理 結(jié)構(gòu)化數(shù)據(jù)(較為規(guī)范的半結(jié)構(gòu)化數(shù)據(jù)也可以處理)

SparkSQL的數(shù)據(jù)抽象

DataFrame

DataFrame是特殊得RDD

DataFrame是一個分布式的表

DataFrame ==> RDD -(泛型) + Schema(列約束信息)+方便的SQL操作+優(yōu)化

DataSet

DataSet是特殊得DataFrame,DataFrame是特殊得RDD

DataSet是一個分布式的表

DataSet ==> DataFrame+泛型

DataSet == > RDD + Schema +方便的SQL操作 +優(yōu)化

區(qū)別

相互間的轉(zhuǎn)換

DataFrame = RDD - 泛型 +Schema + SQL + 優(yōu)化

DataSet = RDD +Schema + SQL +優(yōu)化

DataSet = DataFrame +泛型 +優(yōu)化

版本

RDD(Spark1.0) -> DataFrame(Saprk1.3) -> DataSet(Spark1.6)

Spark SQL 入門

●在spark2.0之后

這些都統(tǒng)一于SparkSession佃迄,SparkSession 封裝了SqlContext及HiveContext泼差,實現(xiàn)了SQLContext及HiveContext所有功能

通過SparkSession還可以獲取到SparkConetxt

創(chuàng)建DataFrame

1.在本地創(chuàng)建一個文件,有三列呵俏,分別是id堆缘、name、age普碎,用空格分隔吼肥,然后上傳到hdfs上。vim /root/person.txt

上傳數(shù)據(jù)文件到HDFS上:

hadoop fs -put /root/person.txt? /

2.在spark shell執(zhí)行下面命令麻车,讀取數(shù)據(jù)缀皱,將每一行的數(shù)據(jù)使用列分隔符分割

先執(zhí)行

/opt/soft/spark/bin/spark-shell

val lineRDD= sc.textFile("hdfs://node01:8020/person.txt").map(_.split(" "))?

3.定義case class(相當(dāng)于表的schema)

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

4.將RDD和case class關(guān)聯(lián)

val personRDD = lineRDD.map(x =>Person(x(0).toInt, x(1), x(2).toInt))? ? ? ? //RDD[Person]

5.將RDD轉(zhuǎn)換成DataFrame

val personDF = personRDD.toDF

6.查看數(shù)據(jù)和schema

personDF.show

personDF.printSchema

7.注冊表

personDF.createOrReplaceTempView("t_person")

8.執(zhí)行SQL

spark.sql("select id,name from t_person

where id > 3").show

9.也可以通過SparkSession構(gòu)建DataFrame

val dataFrame=spark.read.text("hdfs://node-01:9000/person.txt") //

dataFrame.show //直接讀取的文本文件沒有schema信息

創(chuàng)建DataSet

1.通過spark.createDataset創(chuàng)建

val fileRdd = sc.textFile("hdfs://node-01:9000/person.txt"

val ds1 = spark.createDataset(fileRdd)? //DataSet[String]讀取普通文本,需要添加schema

ds1.show

2.通RDD.toDS方法生成DataSet

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

val data = List(Person("zhangsan",20),Person("lisi",30))?

val dataRDD = sc.makeRDD(data)

val ds2 = dataRDD.toDS?

ds2.show

3.通過DataFrame.as[泛型]轉(zhuǎn)化生成DataSet

case class Person(name:String, age:Long)

val jsonDF= spark.read.json("file:///opt/soft/spark/examples/src/main/resources/people.json")

val jsonDS = jsonDF.as[Person]?

jsonDS.show

4.DataSet也可以注冊成表進(jìn)行查詢

jsonDS.createOrReplaceTempView("t_person")

spark.sql("select * fromt_person").show

總結(jié)

不管是DataFrame還是DataSet都可以注冊成表,之后就可以使用SQL進(jìn)行查詢了

DEA開發(fā)Spark SQL

第1種:指定列名添加Schema

第2種:通過StructType指定Schema

第3種:編寫樣例類,利用反射機(jī)制推斷Schema

RDD动猬、DF啤斗、DS之間的相互轉(zhuǎn)換(6種)

SQL風(fēng)格

DSL風(fēng)格

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市赁咙,隨后出現(xiàn)的幾起案子钮莲,更是在濱河造成了極大的恐慌,老刑警劉巖彼水,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件崔拥,死亡現(xiàn)場離奇詭異,居然都是意外死亡猿涨,警方通過查閱死者的電腦和手機(jī)握童,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叛赚,“玉大人澡绩,你說我怎么就攤上這事“掣剑” “怎么了肥卡?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長事镣。 經(jīng)常有香客問我步鉴,道長,這世上最難降的妖魔是什么璃哟? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任氛琢,我火速辦了婚禮,結(jié)果婚禮上随闪,老公的妹妹穿的比我還像新娘阳似。我一直安慰自己,他們只是感情好铐伴,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布撮奏。 她就那樣靜靜地躺著俏讹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪畜吊。 梳的紋絲不亂的頭發(fā)上泽疆,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機(jī)與錄音玲献,去河邊找鬼殉疼。 笑死,一個胖子當(dāng)著我的面吹牛青自,可吹牛的內(nèi)容都是我干的株依。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼延窜,長吁一口氣:“原來是場噩夢啊……” “哼恋腕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起逆瑞,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤荠藤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后获高,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哈肖,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年念秧,在試婚紗的時候發(fā)現(xiàn)自己被綠了淤井。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡摊趾,死狀恐怖币狠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情砾层,我是刑警寧澤漩绵,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站肛炮,受9級特大地震影響止吐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜侨糟,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一碍扔、第九天 我趴在偏房一處隱蔽的房頂上張望枕面。 院中可真熱鬧醋寝,春花似錦毯盈、人聲如沸沫换。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽轧拄。三九已至诅病,卻和暖如春汰具,著一層夾襖步出監(jiān)牢的瞬間卓鹿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工留荔, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留吟孙,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓聚蝶,卻偏偏與公主長得像杰妓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子碘勉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容