spark sql之from_json函数
目录
- 前言
- 函数语法
- 参数说明
- 返回值
- 案例
- 案例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