Spark shell
- Spark Shell 提供了簡(jiǎn)單的方式來學(xué)習(xí)Spark API
- Spark Shell可以以實(shí)時(shí)寻馏、交互的方式來分析數(shù)據(jù)
- Spark Shell支持Scala和Python
- 一個(gè)Driver就包括main方法和分布式數(shù)據(jù)集
- Spark Shell本身就是一個(gè)Driver秤标,里面已經(jīng)包含了main方法
Spark RDD
RDD操作
RDD創(chuàng)建
-
從文件系統(tǒng)中加載數(shù)據(jù)創(chuàng)建RDD突那,并指定分區(qū)的個(gè)數(shù)
- 本地文件系統(tǒng)
- HDFS
- 其它
-
通過并行集合(數(shù)組)創(chuàng)建RDD
- 可以將本地的Java對(duì)象變?yōu)镽DD
-
創(chuàng)建RDD時(shí)手動(dòng)指定分區(qū)個(gè)數(shù)
-
在調(diào)用textFile()和parallelize()方法的時(shí)候手動(dòng)指定分區(qū)個(gè)數(shù)即可脆丁,語(yǔ)法格式如下:
sc.textFile(path, partitionNum)
其中秃诵,path參數(shù)用于指定要加載的文件的地址肥矢,partitionNum參數(shù)用于指定分區(qū)個(gè)數(shù)斗埂。
-
RDD Transformation
54004037642
RDD Repartition
- 通過轉(zhuǎn)換操作得到新RDD 時(shí)符糊,直接調(diào)用repartition 方法或自定義分區(qū)方法
- 什么使用用到該方法?
- 當(dāng)遇到某些操作呛凶,如
join
男娄,則可將寬依賴Partition之后變?yōu)檎蕾嚕阌趐ipeline執(zhí)行
- 當(dāng)遇到某些操作呛凶,如
RDD Action
- 惰性機(jī)制:整個(gè)轉(zhuǎn)換過程只是記錄了轉(zhuǎn)換的軌跡漾稀,并不會(huì)發(fā)生真正的計(jì)算模闲,只有遇到action操作時(shí),才會(huì)發(fā)生真正的計(jì)算围橡,開始從血緣關(guān)系源頭開始,進(jìn)行物理的轉(zhuǎn)換操作操
RDD保存
- RDD寫入到本地文本文件
- RDD中的數(shù)據(jù)保存到HDFS文件中
Spark SQL
- Spark SQL增加了DataFrame(即帶有Schema信息的RDD)缕贡,使用戶可以在Spark SQL中執(zhí)行SQL語(yǔ)句翁授,數(shù)據(jù)既可以來自RDD拣播,也可以是Hive、HDFS收擦、Cassandra等外部數(shù)據(jù)源贮配,還可以是JSON格式的數(shù)據(jù)
- Spark SQL目前支持Scala、Java塞赂、Python三種語(yǔ)言泪勒,支持SQL-92規(guī)范
Schema
- RDD的局限性:RDD是分布式Java對(duì)象的集合,但是對(duì)象內(nèi)部結(jié)構(gòu)宴猾,即數(shù)據(jù)Schema不可知
- 54004061559
DataFrame
- 無論讀取什么數(shù)據(jù)圆存,都寫成
DataSet<Row>
- 54004065924
DataSet
- 相比DataFrame,DataSet明確聲明類型
- 54004070261
- 在源碼中仇哆,可以將DataFrame理解為
DataSet<Row>
的別名 - 若查詢語(yǔ)句中有一列不存在沦辙,則可以在編譯時(shí)檢查出來
SQL Query
- sql(“”)括號(hào)中的SQL語(yǔ)句對(duì)于該函數(shù)來說僅僅是一條字符串
- 54004076814
- 編譯時(shí)不會(huì)進(jìn)行任何語(yǔ)法檢查
比較
54004082500