Spark Sql读取字符串json数组

本文介绍了如何在SparkSQL中解析包含JSON对象的字符串数组数据。首先通过字符串处理函数转换数据格式,然后使用explode函数展开数据,最后利用json_tuple或from_json函数提取字段,实现数据的解析。提供了一种简洁明了的方法来处理此类问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spark Sql读取字符串数组

开门见山

样例数据:

造数sql:
df:
SELECT "[{'id':1,'name':'abc'},{'id':1,'name':'abc'}]" AS js

+---------------------------------------------+
|js                                           |
+---------------------------------------------+
|[{'id':1,'name':'abc'},{'id':1,'name':'abc'}]|
+---------------------------------------------+

可以看到,数据的内容是一个json的数组,这个数组里面有两个json对象,那么如何解析这个数据呢?

解决方案

  1. 强行解析这个字符串数据
select get_json_object(col,"$.id") as id,
       get_json_object(col,"$.name") as name
 from (select explode(split(replace(replace(replace(js,"[",""),"]",""),"},{","}~{"),"~")) as col 
         from df) 

先通过sql的字符串处理函数,将这个sql变成json对象数组,再利用explode将这个json对象数组炸开成多行数据(每行数据一个json对象)
再从这个表中将数据提取出来:

+---+----+
|id |name|
+---+----+
|1  |abc |
|1  |abc |
+---+----+

2.进阶版
推荐使用这种方式去解析json的json对象字符串数组

select 
json_tuple(t,'id','name') as (id,name)
from (
select explode(from_json(js,'array<string>')) as t from df
)

得到的结果为:

+---+----+
|id |name|
+---+----+
|1  |abc |
|1  |abc |
+---+----+

这种方式简洁明了的可以处理掉这个spark sql读取json的数组json对象的字符串。

致此,问题解决~

总结:

如果大佬们有神其它好的指导意见或者学习建议,请在下方评论区中留言交流。谢谢大佬~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值