1. 程式人生 > 實用技巧 >spark行列資料轉換

spark行列資料轉換

spark 1X1維度的資料轉換成nX1維度

# orderid需要進行拆分欄位
select orderid,orderids 
from table_names
lateral view explode (split(orderid,','))o as orderids 

json文字提取相同key的多個values

select distinct get_json_object(body,'$.session.sid')as sid
,orderids,orderid 
,body
,get_json_object(orderids,'$.orderId')as id

from table_names

lateral view explode (split(regexp_replace(regexp_extract(get_json_object(body,'$.session.orderIds'),'^\\[(.+)\\]$',1),'\\}\\,\\{', '\\}\\|\\|\\{'),'\\|\\|'))b as orderids  -- 先正則替換,一行轉多行

lateral view json_tuple(orderids,'orderId')d as orderId  -- 然後提取所需關鍵詞

where get_json_object(body,'$.session.sid')='123456'

spark nX1維度的資料轉換成1X1維度

  collect_set(欄位)   ## 去重將多行資料轉換成一維陣列格式
  collect_list(欄位)  ## 不去重將多行資料轉換成一維陣列格式
  collect_set(欄位)[0]  ## 取陣列中的第一個資料 
  相當於將值進行了聚合,因此需要group by 操作