sparksql 函数-2

   字段映射处理,两种方式:str_to_map, case when

 

select
    case substr(idcard,1,2)
            when '11' then '北京'
            when '33' then '浙江'
            when '46' then '海南'
            when '65' then '新疆'
            when '12' then '天津'
            when '34' then '安徽'
            when '50' then '重庆'
            when '71' then '台湾'
            when '13' then '河北'
            when '35' then '福建'
            when '51' then '四川'
            when '81' then '香港'
            when '14' then '山西'
            when '36' then '江西'
            when '52' then '贵州'
    else '其他' end as addr
from idcard_tab


select
str_to_map('11=北京&33=浙江&46=海南&65=新疆&12=天津&34=安徽&50=重庆&71=台湾&13=河北&35=福建&51=四川&81=香港&14=山西&36=江西&52=贵州', '&', '=')[substr(idcard,1,2)]
from idcard_tab

&分隔 key=value

get_json_object(string json_string, string path)

说明:
第一个参数填写json对象变量,第二个参数使用$表示json变量标识,然后用 . 或 [] 读取对象或数组;如果输入的json字符串无效,那么返回NULL。
每次只能返回一个数据项。

举例:
data 为 test表中的字段,数据结构如下:

data =
{
 "store":
        {
         "fruit":[{"weight":8,"type":"apple"}, {"weight":9,"type":"pear"}],  
         "bicycle":{"price":19.95,"color":"red"}
         }, 
 "email":"amy@only_for_json_udf_test.net", 
 "owner":"amy" 
}

1.get单层值

hive> select  get_json_object(data, '$.owner') from test;
结果:amy

2.get多层值.

hive> select  get_json_object(data, '$.store.bicycle.price') from test;
结果:19.95

3.get数组值[]

hive> select  get_json_object(data, '$.store.fruit[0]') from test;
结果:{"weight":8,"type":"apple"}
 

你可能感兴趣的:(spark)