hive解析json陣列問題
阿新 • • 發佈:2020-07-14
問題描述:json陣列中存在特殊字元,無法 利用split切分陣列元素。
解決思路:(1)自定義udtf;(2)利用spark-sql
一般的場景:json字串一個array, array中有幾個網址如www.cnblogs.com等。
解決方法如下:
--- [{"url":"www.cnblogs.com","title":"cnblogs"},{"url":"www.example.com","title":"example"}] select explode( split( regexp_replace( regexp_replace('[{"url":"www.cnblogs.com","title":"cnblogs"},{"url":"www.example.com","title":"example"}]', '[\\]\\[]','') ,'\\}\\,\\{','\\}\\;\\{') ,'\\;') ) lfo
split這種方式處理json存在破壞json完整性,穩妥的辦法是全程利用json的方法
# url_arr = '[{"url":"www.cnblogs.com","title":"cnblogs"},{"url":"www.example.com","title":"example"}]' df.select('some_col', explode(from_json('url_arr', ArrayType(StringType()))) ).toDF('some_col','url_json')
輸出結果:
{"url":"www.cnblogs.com","title":"cnblogs"}
{"url":"www.example.com","title":"example"}