資料是帶有時間戳的json陣列
資料格式: ***|[{},{}]
1610352196000|[
,"data":}
,,"data":}
]
讀取
val tmp = sc.
textfile
("in/test_json.log"
) tmp.
foreach
(println)
//列印資料
json陣列可根據},,\n timeserver| ,\n timeserver| \\,\\\\\n$timeserver\\|\\,\n timeserver|).
flatmap
(_.split
("\n"))
.todf()
df.show
(false
)//列印資料
val end = system.
currenttimemillis()
println
(s"***************==== 耗時: $ 秒 ***************====")}
}單條資料被拆分出來
再通過map運算元將時間戳timeserver提取出來就可以
使用get_json_object獲取json裡面欄位的值
object json_dataframe ,\n timeserver| \\,\\\\\n$timeserver\\|\\,\n timeserver|})
.flatmap
(_.split
("\n"))
.map
( line =>).
todf
("timeserver"
,"value"
)
val jsondf = df.
select
( $"timeserver"
,get_json_object
($"value"
,"$.cp_game_id").
alias
("cp_game_id"),
get_json_object
($"value"
,"$.event").
alias
("event"),
get_json_object
($"value"
,"$.data").
alias
("data"))
jsondf.
show
(false
)// 獲取子json裡面字段
val resultdf = jsondf.
select
( $"timeserver"
, $"cp_game_id"
,get_json_object
($"event"
,"$.event_time").
alias
("event_time"),
get_json_object
($"event"
,"$.event_name").
alias
("event_name"),
$"data"
// 使用get_json_object獲取子欄位
) resultdf.
show()
sc.stop()
val end = system.
currenttimemillis()
println
(s"***************==== 耗時: $ 秒 ***************====")}
}
效果
到這來,就完成了特殊json陣列解析
Spark解析Json案例
最近常常和json打交道,記錄一下spark解析json案例,資料有點長 roadinters formatted address 浙江省杭州市江乾區白楊街道浙江育英職業技術學院繼續教育分院浙江育英職業技術學院 addresscomponent country 中國 township 白楊街道 bu...
json巢狀json如何解析
json格式如下 使用google的gson包處理,非常簡單 發現這個問題其實挺簡單的。我的解決方法如下 先定義三個類分別為 biz,bizs 和 data,用於對應你的 json 串中的從裡到外的三個部分。biz 類中包含 id,name,add 三個屬性,bizs 中包含壹個 biz 型別的陣列...
Gosn解析Json陣列
新增依賴 compile com.google.code.gson gson 2.2.4 通過將獲取的json資料解析 httputil封裝 public static string sendget string code,string time 定義bufferedreader 輸入流來讀取 ur...