SparkSQL操作JSON字段的⼩技巧
sql 字符串转数组前⾔
介绍Spark SQL的JSON⽀持,这是我们在Databricks中开发的⼀个功能,可以在Spark中更容易查询和创建JSON数据。随着⽹络和移动应⽤程序的普及,JSON已经成为Web服务API以及长期存储的常⽤的交换格式。使⽤现有的⼯具,⽤户通常会使⽤复杂的管道来在分析系统中读取和写⼊JSON数据集。在Apache Spark 1.1中发布Spark SQL的JSON⽀持,在Apache Spark 1.2中增强,极⼤地简化了使⽤JSON数据的端到端体验。
很多时候,⽐如⽤structure streaming消费kafka数据,默认可能是得到key,value字段,key是偏移量,value是⼀个byte数组。很可能value其实是⼀个Json字符串。这个时候我们该如何⽤SQL操作这个json⾥的东西呢?另外,如果我处理完的数据,我想写⼊到kafka,但是我想把整条记录作为json格式写⼊到Kafka,⼜该怎么写这个SQL呢?
get_json_object
第⼀个就是get_json_object,具体⽤法如下:
select get_json_object('{"k": "foo", "v": 1.0}','$.k') as k
需要给定get_json_object ⼀个json字段名(或者字符串),然后通过类似jsonPath的⽅式去拿具体的值。
这个⽅法其实有点⿇烦,如果要提取⾥⾯的是个字段,我就要写是个类似的东西,很复杂。
from_json
具体⽤法如下:
select a.k from (
select from_json('{"k": "foo", "v": 1.0}','k STRING, v STRING',map("","")) as a
)
这个⽅法可以给json定义⼀个Schema,这样在使⽤时,就可以直接使⽤a.k这种⽅式了,会简化很多。
to_json
该⽅法可以把对应字段转化为json字符串,⽐如:
select to_json(struct(*)) AS value
可以把所有字段转化为json字符串,然后表⽰成value字段,接着你就可以把value字段写⼊Kafka了。是不是很简单。
处理具有⼤量字段的JSON数据集
JSON数据通常是半结构化、⾮固定结构的。将来,我们将扩展Spark SQL对JSON⽀持,以处理数据集中的每个对象可能具有相当不同的结构的情况。例如,考虑使⽤JSON字段来保存表⽰HTTP标头的键/值对的数据集。每个记录可能会引⼊新的标题类型,并为每个记录使⽤⼀个不同的列将产⽣⼀个⾮常宽的模式。我们计划⽀持⾃动检测这种情况,⽽是使⽤map类型。因此,每⾏可以包含Map,使得能够查询其键/值对。这样,Spark SQL将处理具有更少结构的JSON数据集,推动了基于SQL的系统可以处理的那种查询的边界。
总结
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,如果有疑问⼤家可以留⾔交流,谢谢⼤家对的⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论