《從0到1學(xué)習(xí)Spark》--DataFrame和Dataset探秘

昨天小強(qiáng)帶著大家了解了Spark SQL的由來、Spark SQL的架構(gòu)和SparkSQL四大組件:Spark SQL胶哲、DataSource Api、DataFrame Api和Dataset Api甸鸟。今天小強(qiáng)和大家一起揭開Spark SQL背后DataFrame和Dataset的面紗。

DataFrame和Dataset演變

Spark要對閉包進(jìn)行計(jì)算宫屠、將其序列化黑低,并將她們發(fā)送到執(zhí)行進(jìn)程鳍侣,這意味著你的代碼是以原始形式發(fā)送的第股,基本沒有經(jīng)過優(yōu)化应民。在RDD中午發(fā)表是結(jié)構(gòu)化數(shù)據(jù),對RDD進(jìn)行查詢也不可行夕吻。使用RDD很容易但有時(shí)候處理元組會把代碼弄亂诲锹。引入DataFrame和Dataset可以處理數(shù)據(jù)代碼更加易讀,支持java涉馅、scala归园、python和R等。
DataFrame用于創(chuàng)建數(shù)據(jù)的行和列稚矿,它就像是關(guān)系數(shù)據(jù)庫管理系統(tǒng)中的一張表蔓倍,DataFrame是一種常見的數(shù)據(jù)分析抽象悬钳。
Dataset結(jié)合了DataFrame和RDD的優(yōu)勢:靜態(tài)類型、會更容易實(shí)現(xiàn)RDD的功能特性偶翅,以及DataFrame的卓越性能特性。

為什么使用DataFrame和Dataset

小強(qiáng)認(rèn)為答案很簡單:速度和易用性碉渡。DataFrame提供了優(yōu)化聚谁、速度、自動模式發(fā)現(xiàn)滞诺;他們會讀取更少的數(shù)據(jù)形导,并提供了RDD之間的互相操作性。
1习霹、優(yōu)化
Catalyst為DataFrame提供了優(yōu)化:謂詞下的推到數(shù)據(jù)源朵耕,只讀取需要的數(shù)據(jù)。創(chuàng)建用于執(zhí)行的物理計(jì)劃淋叶,并生成比手寫代碼更優(yōu)化的JVM字節(jié)碼阎曹。

就像上圖這樣,DataFrame和Dataset進(jìn)行了緩存煞檩,在緩存時(shí)处嫌,他們以更加高效的列式自動存儲數(shù)據(jù),這種格式比java斟湃、Python對象明顯更為緊湊熏迹,并進(jìn)行了優(yōu)化。
2凝赛、速度
由于優(yōu)化器會生成用于的JVM字節(jié)碼注暗,scala和python程序就有相似的性能。Dataset使用優(yōu)化的編碼器把對象進(jìn)行序列化和反序列化墓猎,以便進(jìn)行并處理并通過網(wǎng)絡(luò)傳輸捆昏。
3、自動模式發(fā)現(xiàn)
要從RDD創(chuàng)建DataFrame陶衅,必須提供一個模式屡立。而從JSON、Parquet和ORC文件創(chuàng)建DataFrame時(shí)搀军,會自動發(fā)現(xiàn)一個模式膨俐,包括分區(qū)的發(fā)現(xiàn)。

實(shí)踐

在pyspark shell或spark-shell中罩句,會自動創(chuàng)建一個名為spark的預(yù)配置SparkSession焚刺。
從Spark 2.0及更高的版本,SparkSession成為關(guān)系型功能的入口點(diǎn)门烂。當(dāng)使用Hive時(shí)乳愉,SparkSession必須使用enableSupport方法創(chuàng)建兄淫,用來訪問Hive Metastore、SerDes和用戶自定義的函數(shù)蔓姚。

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

1捕虽、從結(jié)構(gòu)化數(shù)據(jù)文件創(chuàng)建DataFrame

2、從RDD創(chuàng)建DataFrame
3坡脐、從Hive中的表中創(chuàng)建DataFrame

把DataFrame轉(zhuǎn)換為RDD非常簡單泄私,只需要使用.rdd方法

常用方法的示例

1、DS與DF的關(guān)系
type DataFrame = Dataset[Row]
2备闲、加載txt數(shù)據(jù)
val rdd = sc.textFile("data")

val df = rdd.toDF()
這種直接生成DF晌端,df數(shù)據(jù)結(jié)構(gòu)為(查詢語句:df.select("*").show(5))

只有一列,屬性為value恬砂。
3咧纠、 df.printSchema()

4、使用反射推斷模式

小結(jié)

小強(qiáng)從DataFrame和Dataset演變以及為什么使用他們泻骤,還有對于DataFrame和Dataset創(chuàng)建和互相轉(zhuǎn)換的一些實(shí)踐例子進(jìn)行介紹漆羔,當(dāng)時(shí)這些都是比較基礎(chǔ)的。深入學(xué)習(xí)Spark SQL需要了解更多Spark SQL提供的方法瞪讼。后續(xù)小強(qiáng)為大家?guī)鞸aprk SQL相關(guān)方法以及優(yōu)化钧椰。

【關(guān)注】和【點(diǎn)贊】是對小強(qiáng)最大的支持!7贰嫡霞!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市希柿,隨后出現(xiàn)的幾起案子诊沪,更是在濱河造成了極大的恐慌,老刑警劉巖曾撤,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件端姚,死亡現(xiàn)場離奇詭異,居然都是意外死亡挤悉,警方通過查閱死者的電腦和手機(jī)渐裸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來装悲,“玉大人昏鹃,你說我怎么就攤上這事【髡铮” “怎么了洞渤?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長属瓣。 經(jīng)常有香客問我载迄,道長讯柔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任护昧,我火速辦了婚禮魂迄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘捏卓。我一直安慰自己极祸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布怠晴。 她就那樣靜靜地躺著,像睡著了一般浴捆。 火紅的嫁衣襯著肌膚如雪蒜田。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天选泻,我揣著相機(jī)與錄音冲粤,去河邊找鬼。 笑死页眯,一個胖子當(dāng)著我的面吹牛梯捕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播窝撵,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼傀顾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了碌奉?” 一聲冷哼從身側(cè)響起短曾,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赐劣,沒想到半個月后嫉拐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡魁兼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年婉徘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咐汞。...
    茶點(diǎn)故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡盖呼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出碉考,到底是詐尸還是另有隱情塌计,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布侯谁,位于F島的核電站锌仅,受9級特大地震影響章钾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜热芹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一贱傀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧伊脓,春花似錦府寒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至纯蛾,卻和暖如春纤房,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背翻诉。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工炮姨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人碰煌。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓舒岸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親芦圾。 傳聞我的和親對象是個殘疾皇子蛾派,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評論 2 355

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