鎖屏面試題百日百刷-Spark篇(八)
鎖屏面試題百日百刷,每個工作日堅持更新面試題。鎖屏面試題app、小程序現(xiàn)已上線,官網(wǎng)地址:https://www.demosoftware.cn。已收錄了每日更新的面試題的所有內(nèi)容,還包含特色的解鎖屏幕復(fù)習(xí)面試題、每日編程題目郵件推送等功能。讓你在面試中先人一步!接下來的是今日的面試題:
1.coalesce和repartition的區(qū)別
coalesce和repartition都用于改變分區(qū),coalesce用于縮小分區(qū)且不會進(jìn)行shuffle,repartition用于增大分區(qū)(提供并行度)會進(jìn)行shuffle,在spark中減少文件個數(shù)會使用coalesce來減少分區(qū)來到這個目的。但是如果數(shù)據(jù)量過大,分區(qū)數(shù)過少會出現(xiàn)OOM所以coalesce縮小分區(qū)個數(shù)也需合理
2.Spark sql中cache緩存級別
DataFrame的cache默認(rèn)采用 MEMORY_AND_DISK 這和RDD 的默認(rèn)方式不一樣RDD cache 默認(rèn)采用MEMORY_ONLY
3.Spark sql中怎樣釋放緩存和緩存
緩存:(1)dataFrame.cache (2)sparkSession.catalog.cacheTable(“tableName”)釋放緩存(1)dataFrame.unpersist (2)sparkSession.catalog.uncacheTable(“tableName”)
4.Spark sql Shuffle默認(rèn)并行度
參數(shù)spark.sql.shuffle.partitions 決定 默認(rèn)并行度200
5.什么是kryo序列化
kryo序列化比java序列化更快更緊湊,但spark默認(rèn)的序列化是java序列化并不是spark序列化,因?yàn)閟park并不支持所有序列化類型,而且每次使用都必須進(jìn)行注冊。注冊只針對于RDD。在DataFrames和DataSet當(dāng)中自動實(shí)現(xiàn)了kryo序列化。
6.Spark sql中如何創(chuàng)建臨時表和全局臨時表
DataFrame.createTempView() 創(chuàng)建普通臨時表
DataFrame.createGlobalTempView() 創(chuàng)建全局臨時表
7.講一講BroadCast join 廣播join
原理:先將小表數(shù)據(jù)查詢出來聚合到driver端,再廣播到各個executor端,使表與表join時進(jìn)行本地join,避免進(jìn)行網(wǎng)絡(luò)傳輸產(chǎn)生shuffle。
使用場景:大表join小表 只能廣播小表
8.如何控制Spark reduce緩存,調(diào)優(yōu)Shuffle
spark.reducer.maxSizeInFilght 此參數(shù)為reduce task能夠拉取多少數(shù)據(jù)量的一個參數(shù)默認(rèn)48MB,當(dāng)集群資源足夠時,增大此參數(shù)可減少reduce拉取數(shù)據(jù)量的次數(shù),從而達(dá)到優(yōu)化shuffle的效果,一般調(diào)大為96MB,資源夠大可繼續(xù)往上跳。
spark.shuffle.file.buffer 此參數(shù)為每個shuffle文件輸出流的內(nèi)存緩沖區(qū)大小,調(diào)大此參數(shù)可以減少在創(chuàng)建shuffle文件時進(jìn)行磁盤搜索和系統(tǒng)調(diào)用的次數(shù),默認(rèn)參數(shù)為32k 一般調(diào)大為64k。
9.如何注冊UDF函數(shù)
SparkSession.udf.register 方法進(jìn)行注冊
10.SparkSQL中join操作與left join操作的區(qū)別?
join 和 sql 中的 inner join 操作很相似,返回結(jié)果是前面一個集合和后面一個集合中匹配成功的,過濾掉關(guān)聯(lián)不上的。
leftJoin 類似于 SQL 中的左外關(guān)聯(lián) left outer join,返回結(jié)果以第一個 RDD 為主,關(guān)聯(lián)不上的記錄為空。
部分場景下可以使用 left semi join 替代 left join:
因?yàn)?left semi join 是 in(keySet) 的關(guān)系,遇到右表重復(fù)記錄,左表會跳過,性能更高,而 left join 則會一直遍歷。
但是?left semi join 中最后 select 的結(jié)果中只許出現(xiàn)左表中的列名,因?yàn)橛冶碇挥?join key 參與關(guān)聯(lián)計算了