问题描述:json数组中存在特殊字符,无法 利用split切分数组元素。
解决思路:(1)自定义udtf;(2)利用spark-sql
一般的场景:json字符串一个array, array中有几个网址如www.cnblogs.com等。
解决方法如下:
--- [{"url":"www.cnblogs.com","title":"cnblogs"},{"url":"www.example.com","title":"example"}]
select explode(
split(
regexp_replace(
regexp_replace(‘[{"url":"www.cnblogs.com","title":"cnblogs"},{"url":"www.example.com","title":"example"}]‘, ‘[\\]\\[]‘,‘‘)
,‘\\}\\,\\{‘,‘\\}\\;\\{‘)
,‘\\;‘)
) lfo
split这种方式处理json存在破坏json完整性,稳妥的办法是全程利用json的方法
# url_arr = ‘[{"url":"www.cnblogs.com","title":"cnblogs"},{"url":"www.example.com","title":"example"}]‘
df.select(‘some_col‘,
explode(from_json(‘url_arr‘, ArrayType(StringType())))
).toDF(‘some_col‘,‘url_json‘)
输出结果:
{"url":"www.cnblogs.com","title":"cnblogs"}
{"url":"www.example.com","title":"example"}
原文:https://www.cnblogs.com/dobbin2018/p/13296419.html