spark-sql处理json字符串的常用函数

这篇具有很好参考价值的文章主要介绍了spark-sql处理json字符串的常用函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

整理了spark-sql处理json字符串的几个函数:
1 get_json_object 解析不含数组的 json
 
2 from_json  解析json

3 schema_of_json 提供生成json格式的方法

4 explode   把JSONArray转为多行

get_json_object

get_json_object(string json_string, string path) :适合最外层为{}的json解析。
 第一个参数是json对象变量,也就是含json的字段 。第二个参数使用  作为json变量标识 定位数据位置,按jsonpath的规则
简单的例子:
select get_json_object('{"drink":"Tea","fruit":"Apple"}', '$.drink') as text
text
Tea

from_json

from_json(column, schema_string):用schema_string的格式,来解析column。 用schema_string的格式可以用schema_of_json获取。
简单例子:
select from_json('[{"text":"Tea"},{"text":"Apple"}]', 'ARRAY<STRUCT<text: STRING>>');
jsontostructs([{"text":"Tea"},{"text":"Apple"}])
[{"text":"Tea"},{"text":"Apple"}]
进阶例子:
select from_json('[{"text":"Tea"},{"text":"Apple"}]', 'ARRAY<STRUCT<text: STRING>>')[0]['text'] as q;
q
tea

schema_of_json

schema_of_json(s):解析字符串s,返回描述json格式的字符串。
字典:STRUCT,字典里是一些Key-Value键值对。
列表:ARRAY,列表里是一些相同的元素。
例子1  array:
select schema_of_json('[{"text":"a"},{"b":"a"}, {"c":1}]')

结果:
ARRAY<STRUCT<`b`: STRING, `c`: BIGINT, `text`: STRING>>
例子2  复杂的json:
select schema_of_json('{"vid":391420754,"aid":9701587,"isreply":"0","ispic":"0","fromPage":"2","site":"2","isreplysp":"2","isat":"0","isemoji":"0","loc":"1","page":"1","track_info":""}')

结果:

struct<aid:bigint,fromPage:string,isat:string,isemoji:string,ispic:string,isreply:string,isreplysp:string,loc:string,page:string,site:string,track_info:null,vid:bigint>
例子3  混合:
select schema_of_json('{"text":["a", 2, "b", "a"],"b":1.2, "c":1}')

结果:
STRUCT<`b`: DOUBLE, `c`: BIGINT, `text`: ARRAY<STRING>>
对于复杂的字符串,如果python json.loads报错,schema_of_json可能报错。
批注 1:
语句里有什么,就会返回什么。但一般用json形式的字段,都是扩展字段,里面的属性个数不是固定的。我们可以从生成的结果里面筛选一下,只取我们需要的字段。比如上面的例子2里的,就只取: struct<aid:bigint>
select from_json('{"vid":391420754,"aid":9701587,"page":"1"}' , 'struct<aid:bigint>')

结果:
{"aid":9701587}
批注 2:
如果我们不需要key的话,就直接带上key
select from_json('{"vid":391420754,"aid":9701587,"page":"1"}' , 'struct<aid:bigint>')['aid']

结果:
aid
9701587

explode

explode(from_json(...)):将from_json的内容展成多行(应用于ARRAY,每个元素1行)

例子:

select explode(from_json('[{"text":"Tea"},{"text":"Apple"}]', 'ARRAY<STRUCT<text: STRING>>')) as q;
q
----
{"text":"Tea"}
{"text":"Apple"}
SELECT r1.col.Attr_INT, r1.col.ATTR_DATE, r1.col.ATTR_DOUBLE FROM (SELECT explode(r.json) AS col FROM (SELECT from_json('[{"Attr_INT":1, "ATTR_DOUBLE":10.201, "ATTR_DATE": "2021-01-01"},{"Attr_INT":1, "ATTR_DOUBLE":10.201, "ATTR_DATE": "2021-02-01"}]','array<struct<ATTR_DATE:string,ATTR_DOUBLE:double,Attr_INT:bigint>>') AS json) r) AS r1;
Attr_INT	ATTR_DATE	ATTR_DOUBLE
1	2021-01-01	10.201
1	2021-02-01	10.201
select q.text from (select explode(from_json('[{"text":"Tea"},{"text":"Apple"}]', 'ARRAY<STRUCT<text: STRING>>')) as q);
text
----
Tea
Apple

参考

spark-sql处理json字符串的函数 - 知乎文章来源地址https://www.toymoban.com/news/detail-405037.html

到了这里,关于spark-sql处理json字符串的常用函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JSON对象字符串在C#中进行像sql一样动态查询

    在C#中,我们可以使用多种方法来根据条件动态查询JSON对象字符串数据,类似于SQL语句查询。 使用JObject JObject是Json.NET中的一个类,可以方便地操作JSON对象。通过JObject,我们可以像使用SQL一样使用LINQ查询语句来查询JSON对象。 示例代码: 使用JsonPath JsonPath是一种基于JSON对象

    2023年04月14日
    浏览(40)
  • spark SQL 怎么将一个时间戳字符串转换成hive支持的时间日期类型?

    在 Spark SQL 中,可以使用 to_timestamp 函数将一个时间戳字符串转换成 Hive 支持的时间日期类型。这个函数的语法如下: 其中,timestampStr 表示要转换的时间戳字符串,format 表示时间戳字符串的格式,格式必须与时间戳字符串的实际格式相匹配。如果不指定格式,Spark 会使用默认

    2024年02月11日
    浏览(49)
  • SQL常用替换字符串值的5种方法

    sql中的替换分为三种:1、查询替换;2、更新替换;3新增替换; 下面5个方法函数主要用于实现查询替换,当然update更新也是同样道理 常用替换函数           1、COALESCE() 2、decode()   3、NVL() 4、 replace()  5、 case when

    2024年02月16日
    浏览(36)
  • 常用字符串处理方法汇总--Pandas

    字符串处理只能在Series上进行,不可以在DataFrame上操作,只能对字符串进行处理,不能对整数、日期进行处理 1.1.1 函数功能 统计Series中每个元素中包含pat的次数 1.1.2 函数语法 1.1.3 函数参数 参数 含义 pat 表达式 1.2.1 函数功能 统计Series中每个元素的长度 1.2.2 函数语法 2.1.1 函

    2024年02月12日
    浏览(48)
  • javascript中字符串处理,常用的方法汇总

    ✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 所属专栏: 前端泛海 景天的主页: 景天科技苑 点赞收藏关注不迷路哦,有需要时直接回来直接用。 虽然 JavaScript 有很多用处,但是处理字符串是其中最流行的一个。下面让我们深入地分析一下使用

    2024年03月12日
    浏览(125)
  • # ABAP SQL 字符串处理-CONCAT&CAST

    经常我都要在ABAP的sql语句中对字符串进行处理,现在就总结一下可以用到的方法 在SQL语句中,有时候会有需要拼接字段或者是截取字段 在拼接之前: 运行结果 第一种:concat(A, 字段) as 别名 ----- A 可以为自定义字段 第二种:(C B ) AS 别名 ---- 注意,B与C都是需要为char类型

    2024年04月16日
    浏览(43)
  • 选读SQL经典实例笔记21_字符串处理

    2024年02月13日
    浏览(87)
  • SQL Server日期时间字符串的处理和转换

    在SQL Server中,您可以使用T-SQL函数进行日期时间字符串的处理和转换。要判断一个日期字符串是否包含时间信息,可以使用T-SQL内置的函数CONVERT和TRY_CONVERT,并指定时间格式。 例如,假设有一个名为date_string的日期字符串,您可以使用以下代码来判断它是否包含时间信息: 如

    2024年02月16日
    浏览(51)
  • 在SQL中,可以使用不同的函数来转换字符串日期格式。以下是一些常用的函数:

    1. STR_TO_DATE(): 将字符串转换为日期格式。它接受两个参数:要转换的字符串和日期格式。 示例: 这将把字符串 ‘2023-07-04’ 转换为日期格式,并返回结果作为 converted_date。 2. CAST(): 将字符串转换为日期格式。它接受两个参数:要转换的字符串和目标数据类型。 示例: 这将把

    2024年02月04日
    浏览(61)
  • mysql 解析json字符串、数组字符串、json数组字符串

    笔者使用mysql 5.7进行了一次json字符串的解析,因为一直在搞大数据相关的数据库、olap等,太久没有用mysql5.x的版本,一些函数已经不知道支不支持,我的同事建议我使用like、rlike模糊匹配的方式,身为数据人我不太喜欢用这种手段,因为他们比较低效。于是我想这里总结一下

    2024年02月16日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包