Spark SQL操作JSON字段的小技巧

 更新时间:2018年04月25日 11:50:07   作者:祝威廉  
这篇文章主要给大家介绍了关于Spark SQL操作JSON字段的小技巧,文中通过示例代码介绍的非常详细,对大家学习或者使用spark 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的系统可以处理的那种查询的边界。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • 数据库学习建议之提高数据库速度的十条建议

    数据库学习建议之提高数据库速度的十条建议

    很多网站的重要信息都是保存在数据库中,用户通过提交访问数据库来获取用户信息。如果数据库速度非常的快,有助于节省服务器的资源,那么如何优化数据库的速度呢,下面通过此篇文章一起学习数据库学习建议之提高数据库速度的十条建议
    2015-11-11
  • 详解Flink同步Kafka数据到ClickHouse分布式表

    详解Flink同步Kafka数据到ClickHouse分布式表

    这篇文章主要为大家介绍了Flink同步Kafka数据到ClickHouse分布式表实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • 时序数据库VictoriaMetrics源码解析之写入与索引

    时序数据库VictoriaMetrics源码解析之写入与索引

    这篇文章主要为大家介绍了VictoriaMetrics时序数据库的写入与索引源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 复杂SQL实现分组分情况分页查询代码实例

    复杂SQL实现分组分情况分页查询代码实例

    最近学习了一下SQL的分页查询,总结了复杂SQL分组分页查询的方法,这篇文章主要给大家介绍了关于复杂SQL实现分组分情况分页查询的相关资料,需要的朋友可以参考下
    2023-12-12
  • neo4j安装配置入门教程

    neo4j安装配置入门教程

    这篇文章主要为大家详细介绍了neo4j安装配置入门教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • 数据库的设计方法、规范与技巧

    数据库的设计方法、规范与技巧

    数据库的设计方法、规范与技巧...
    2007-03-03
  • Navicat快速导入和导出sql文件的方法

    Navicat快速导入和导出sql文件的方法

    Navicat是MySQL非常好用的可视化管理工具,功能非常强大,能满足我们日常数据库开发的所有需求。今天教大家如何导入和导出SQL文件,感兴趣的朋友跟随小编一起看看吧
    2021-05-05
  • DBeaver操作数据表的拷贝的实现

    DBeaver操作数据表的拷贝的实现

    这篇文章主要介绍了DBeaver操作数据表的拷贝的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 一文详解SQL中为什么不要使用1=1

    一文详解SQL中为什么不要使用1=1

    很多时候使用where 1=1 可以很方便的解决我们的问题,但是这样很可能会造成非常大的性能损失,这篇文章主要给大家介绍了关于SQL中为什么不要使用1=1的相关资料,需要的朋友可以参考下
    2024-03-03
  • 数据计算中间件技术综述

    数据计算中间件技术综述

    这篇文章主要介绍了数据计算中间件技术综述 ,传统企业大数据架构的问题,通过一张图就能看懂,感兴趣的朋友跟随小编一起通过本文学习吧
    2018-11-11

最新评论