DT代碼中的坑
連續(xù)兩周時間都在支持DT以及相關(guān)的label的開發(fā)
能夠明顯的發(fā)現(xiàn)DT提供的代碼質(zhì)量非常之差。列舉出來哟楷,前事不忘后事之師。
hard core
在spark的代碼中,將master 以及入?yún)⑷縣ard core,入?yún)⒉槐卣f他嗽仪,將master 設(shè)置之后,我spark submit可是會報錯的啊柒莉。
不轉(zhuǎn)為String 直接saveAsTextFile
常常出現(xiàn)
(ABACD,ADF,1)
[Ljava.long.String;@76abcd405]
前者是元組直接輸出闻坚,后者輸出的是地址,寫代碼的時候一定需要注意
集群600G 內(nèi)存兢孝,輸入200G 全部cache
恩 cache 的確可以提高效率窿凤,但是你這個樣子做,確定不會oom跨蟹?
多次join
輸入為 (A,B,C)
希望得到的輸出 (A,B/sum(B),B,D)
做了多次join,開銷非常之大
在實踐之前雳殊,可以先進(jìn)行采樣,加入對A進(jìn)行reduce 之后 窗轩,按key分布的數(shù)據(jù)量不大相种,傾斜不嚴(yán)重的情況下,
可以將join 轉(zhuǎn)變
map 處理為 RDD[String,Map]
再reduce品姓, 得到RDD[String,Map]之后寝并,在map內(nèi)部進(jìn)行相似邏輯的操作,這樣能提高效率腹备。
不做異常檢測
維表可能存在空值衬潦,不做異常檢測,直接進(jìn)行string =》 int 的轉(zhuǎn)化植酥,必然異常镀岛。
過濾數(shù)據(jù)
接上,對空值的過濾友驮,需要謹(jǐn)慎再謹(jǐn)慎漂羊,每條數(shù)據(jù)都是很寶貴的,需要非常認(rèn)真的對待卸留,建議在filter之前走越,先sample一下,看看數(shù)據(jù)是什么樣子耻瑟,看看要filter的數(shù)據(jù)是什么樣子旨指,再做決斷。
sample的重要性
既然用到了spark 處理的數(shù)據(jù)量級自然不會小喳整,在大數(shù)據(jù)量測試之前務(wù)必使用小數(shù)據(jù)量進(jìn)行邏輯的驗證谆构,直接用大數(shù)據(jù)量跑的話,耗時耗資源不去說框都,萬一錯了搬素,代價也很大。
其他非代碼的坑
維表過多
維表過多,導(dǎo)致管理起來非常困難熬尺,一定要協(xié)商好一個更新機(jī)制
Spark-submit 腳本
這個必須有何荚,整理的晚了,每次提交都要重新編寫猪杭,雖然時間不多餐塘,但多幾次,很容易讓人狂躁
整理了如下一個模板
spark-submit模板