hive-group by的時候把兩個字段變成map


源表結構:

pcgid               string                                  

mobilegid           string                                  

value               double  

測試數據如下:

p1 m1 0.6
p1 m2 0.9
p2 m1 1.0

需要的結果是:

p1 {"m2":"0.9","m1":"0.6"} 2

p2 {"m1":"1.0"} 1

就是對源表進行group by之后對另外兩個字段變成key-value存成一個map

查了一下,hive中沒有現成的函數可以直接得到結果。不過可以轉一個思路,把mobilegid和value先連接成字符串,然后再把整個set的結果連接成一個字符串,最后再用str_to_map,完美解決。

select pcgid as gid,str_to_map(concat_ws(",",collect_set(concat_ws(':', mobilegid, cast(value as string)) ))) as gids,count(1) as num
from gemini_product_id_connect_result_pair  
group by pcgid;

p

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM