目錄
- 前言
- 函數語法
- 參數說明
- 返回值
- 案例
- 案例1
- 案例2
前言
在Spark SQL中,from_json函數用于解析包含JSON字符串的列,并將其轉換為Spark SQL的結構化類型(如struct、map或array)
函數語法
from_json(jsonStr, schema [, options])
參數說明
jsonStr: 一個字符串表達式(通常是一個列),包含有效的JSON數據。
schema: 一個定義JSON結構的模式。模式可以用字符串形式(DDL格式)或使用StructType定義(在SQL中通常用字符串表示)。
options (可選): 一個鍵值對的映射,用于控制解析行為。常見的選項包括:
mode: 解析模式,如PERMISSIVE(默認,遇到損壞記錄時放置到名為_corrupt_record的字段中)、DROPMALFORMED(忽略損壞記錄)和FAILFAST(遇到損壞記錄時拋出異常)。
timestampFormat: 指定時間戳格式,如yyyy-MM-dd’T’HH:mm:ss.SSSXXX。
dateFormat: 指定日期格式,默認為yyyy-MM-dd。
其他如allowUnquotedFieldNames(允許未加引號的字段名)、allowComments(允許注釋)等。
返回值
返回一個StructType的結構,其字段由schema參數定義
案例
案例1
--例1
SELECT from_json('{"a":1, "b":0.8}', 'a INT, b DOUBLE'); ---{"a":1,"b":0.8}
--例2
SELECT from_json('{"time":"26/08/2015"}', 'time Timestamp', map('timestampFormat', 'dd/MM/yyyy')); ---{"time":2015-08-26 00:00:00}
--例3
SELECT from_json('{"teacher": "Alice", "student": [{"name": "Bob", "rank": 1}, {"name": "Charlie", "rank": 2}]}', 'STRUCT<teacher: STRING, student: ARRAY<STRUCT<name: STRING, rank: INT>>>'); --- {"teacher":"Alice","student":[{"name":"Bob","rank":1},{"name":"Charlie","rank":2}]}
案例2
with temp as
(
select "{'age':20,'name':'zs'}" as keywords
union all
select "{'age':18,'name':'ls'}" as keywords
union all
select "{'age':16,'name':'ww'}" as keywords
)select
keys1['age'] as age
from
(select
from_json(keywords,'map<string,string>') as keys1
from temp
) tt
---結果如下
age
20
18
16