SparkSQL應用的一個排錯和重構

故事背景

數(shù)據(jù)處理邏輯:

  1. 將一個json的數(shù)組從map結構里面扣出來
  2. 然后將json數(shù)組里面的每一個元素和map結構里面的其他元素重新組成一個新的map笆环,存入一個新表

實現(xiàn)方式:采用SparkSQL實現(xiàn)(Spark 3.1.2)
問題:數(shù)據(jù)少了很多

原始代碼邏輯

insert overwrite table iceberg_table
select
    id, 
    map_concat(map_filter(config, (k, v) -> k != 'items'), elem)
from (
    select 
        id, 
        config,
        from_json(config['items'], 'array<map<string,string>>') list
    from table
) as a
LATERAL view explode(list) as elem

怎么發(fā)現(xiàn)問題的

  1. 總體條數(shù)的減少
  2. 條數(shù)不少,但是config這個mapkv個數(shù)的減少,采用sum(size(config))

問題

explode的問題

explode的參數(shù)如果是null或者數(shù)組為空的時候喊括,整行記錄都會被清除掉戳杀,而不是用一個null來補充數(shù)據(jù)久妆,而且如果你缺省設置為 array()也是不行的,因為這個數(shù)組為空铸磅,這行數(shù)據(jù)還是會被清除掉的

map_concat的問題

map_concat如果傳入的后續(xù)參數(shù)里面有null的話,整個函數(shù)的返回值也是為null

總結

基于以上2點的問題杭朱,導致了數(shù)據(jù)的大量減少

調整之后的邏輯

初版

insert overwrite table iceberg_table
select
    id, 
    map_concat(map_filter(config, (k, v) -> k != 'items'), COALESCE(elem, map()))
from (
    select 
        id, 
        config,
        from_json(config['items'], 'array<map<string,string>>') list
    from table
) as a
LATERAL view 
    explode(COALESCE(if(size(list)=0, null, list), array(null))) as elem

這版可以看到阅仔,我們需要在2個地方進行修改

終版

切入點:將2處修改合并到一處

insert overwrite table iceberg_table
select
    id, 
    map_concat(map_filter(config, (k, v) -> k != 'items'), elem)
from (
    select 
        id, 
        config,
        from_json(config['items'], 'array<map<string,string>>') list
    from table
) as a
LATERAL view 
explode(COALESCE(if(size(list)=0, null, list), array(map())) as elem
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市弧械,隨后出現(xiàn)的幾起案子八酒,更是在濱河造成了極大的恐慌,老刑警劉巖刃唐,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件羞迷,死亡現(xiàn)場離奇詭異,居然都是意外死亡画饥,警方通過查閱死者的電腦和手機衔瓮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抖甘,“玉大人热鞍,你說我怎么就攤上這事。” “怎么了薇宠?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵偷办,是天一觀的道長。 經常有香客問我澄港,道長爽篷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任慢睡,我火速辦了婚禮逐工,結果婚禮上,老公的妹妹穿的比我還像新娘漂辐。我一直安慰自己泪喊,他們只是感情好,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布髓涯。 她就那樣靜靜地躺著袒啼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪纬纪。 梳的紋絲不亂的頭發(fā)上蚓再,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音包各,去河邊找鬼摘仅。 笑死,一個胖子當著我的面吹牛问畅,可吹牛的內容都是我干的娃属。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼护姆,長吁一口氣:“原來是場噩夢啊……” “哼矾端!你這毒婦竟也來了?” 一聲冷哼從身側響起卵皂,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤秩铆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后灯变,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體殴玛,經...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年柒凉,在試婚紗的時候發(fā)現(xiàn)自己被綠了族阅。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡膝捞,死狀恐怖坦刀,靈堂內的尸體忽然破棺而出愧沟,到底是詐尸還是另有隱情,我是刑警寧澤鲤遥,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布沐寺,位于F島的核電站,受9級特大地震影響盖奈,放射性物質發(fā)生泄漏混坞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一钢坦、第九天 我趴在偏房一處隱蔽的房頂上張望究孕。 院中可真熱鬧,春花似錦爹凹、人聲如沸厨诸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽微酬。三九已至,卻和暖如春颤陶,著一層夾襖步出監(jiān)牢的瞬間颗管,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工滓走, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留垦江,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓闲坎,卻偏偏與公主長得像疫粥,于是被迫代替她去往敵國和親茬斧。 傳聞我的和親對象是個殘疾皇子腰懂,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內容

  • www.DataCamp.com[http://www.DataCamp.com] 中有很多數(shù)據(jù)科學家的cheat...
    wong11閱讀 772評論 0 1
  • 30.域的含義 域英文叫DOMAIN——域(Domain)是Windows網絡中獨立運行的單位,域之間相互訪問則需...
    saluch閱讀 107評論 0 0
  • 之前學習MyBatis整理了一些筆記,筆記分為四個部分:1.MyBatis應用分析與實踐[https://www....
    javacoo閱讀 967評論 0 2
  • 17.分區(qū)分桶的區(qū)別娄蔼,為什么要分區(qū) 分區(qū)表:原來的一個大表存儲的時候分成不同的數(shù)據(jù)目錄進行存儲怖喻。如果說是單分區(qū)表,...
    qydong閱讀 600評論 0 0
  • 一岁诉、Hive基本概念 Hive 是基于 Hadoop 的一個數(shù)據(jù)倉庫工具锚沸,可以將結構化的數(shù)據(jù)文件映射為一張表,并提...
    CJ21閱讀 1,731評論 0 13