鎖屏面試題百日百刷-Spark篇(七)
鎖屏面試題百日百刷,每個(gè)工作日?qǐng)?jiān)持更新面試題。鎖屏面試題app、小程序現(xiàn)已上線,官網(wǎng)地址:https://www.demosoftware.cn。已收錄了每日更新的面試題的所有內(nèi)容,還包含特色的解鎖屏幕復(fù)習(xí)面試題、每日編程題目郵件推送等功能。讓你在面試中先人一步!接下來的是今日的面試題:
1.Spark中廣播變量使用需要注意什么?


1、廣播變量在Driver端定義
2、廣播變量在Execoutor只能讀取不能修改
3、廣播變量的值只能在Driver端修改
4、不能將RDD廣播出去,RDD不存數(shù)據(jù),可以將RDD的結(jié)果廣播出去,rdd.collect()
5、廣播變量使用BlockManager管理,廣播變量一般存儲(chǔ)在內(nèi)存中(Executoion區(qū)域)
2.簡述SparkSQL中RDD、DataFrame、DataSet三者區(qū)別與聯(lián)系?
1)RDD
優(yōu)點(diǎn):
編譯時(shí)類型安全
編譯時(shí)就能檢查出類型錯(cuò)誤
面向?qū)ο蟮木幊田L(fēng)格
直接通過類名點(diǎn)的方式來操作數(shù)據(jù)
缺點(diǎn):
序列化和反序列化的性能開銷
無論是集群間的通信,?還是IO操作都需要對(duì)對(duì)象的結(jié)構(gòu)和數(shù)據(jù)進(jìn)行序列化和反序列化。
GC的性能開銷 ,頻繁的創(chuàng)建和銷毀對(duì)象,?勢(shì)必會(huì)增加GC
2)DataFrame
DataFrame引入了schema和off-heap
schema : RDD每一行的數(shù)據(jù),?結(jié)構(gòu)都是一樣的,這個(gè)結(jié)構(gòu)就存儲(chǔ)在schema中。?Spark通過schema就能夠讀懂?dāng)?shù)據(jù),?因此在通信和IO時(shí)就只需要序列化和反序列化數(shù)據(jù),?而結(jié)構(gòu)的部分就可以省略了。
3)DataSet
DataSet結(jié)合了RDD和DataFrame的優(yōu)點(diǎn),并帶來的一個(gè)新的概念Encoder。
當(dāng)序列化數(shù)據(jù)時(shí),Encoder產(chǎn)生字節(jié)碼與off-heap進(jìn)行交互,能夠達(dá)到按需訪問數(shù)據(jù)的效果,而不用反序列化整個(gè)
對(duì)象。Spark還沒有提供自定義Encoder的API,但是未來會(huì)加入。
三者之間的轉(zhuǎn)換:

3.SparkSQL中join操作與left join操作的區(qū)別?
join和sql中的inner join操作很相似,返回結(jié)果是前面一個(gè)集合和后面一個(gè)集合中匹配成功的,過濾掉關(guān)聯(lián)不上的。
leftJoin類似于SQL中的左外關(guān)聯(lián)left outer join,返回結(jié)果以第一個(gè)RDD為主,關(guān)聯(lián)不上的記錄為空。
部分場景下可以使用left semi join替代left join:
因?yàn)?left semi join?是?in(keySet)?的關(guān)系,遇到右表重復(fù)記錄,左表會(huì)跳過,性能更高,而?left join?則會(huì)一直遍歷。但是left semi join?中最后?select?的結(jié)果中只許出現(xiàn)左表中的列名,因?yàn)橛冶碇挥?join key?參與關(guān)聯(lián)計(jì)算了