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对象,那么如何解析这个数据呢?
解决方案
- 强行解析这个字符串数据
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对象的字符串。
致此,问题解决~
总结:
如果大佬们有神其它好的指导意见或者学习建议,请在下方评论区中留言交流。谢谢大佬~