Spark SQL操作JSON字段的小技巧

前言

介绍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的系统可以处理的那种查询的边界。

总结

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

您可能感兴趣的文章:

  • Spark SQL数据加载和保存实例讲解
  • Spark整合Mongodb的方法
  • Spark调度架构原理详解
(0)

相关推荐

  • Spark调度架构原理详解

    1.启动spark集群,就是执行sbin/start-all.sh,启动master和多个worker节点,master主要作为集群的管理和监控,worker节点主要担任运行各个application的任务.master节点需要让worker节点汇报自身状况,比如CPU,内存多大,这个过程都是通过心跳机制来完成的 2.master收到worker的汇报信息之后,会给予worker信息 3.driver提交任务给spark集群[driver和master之间的通信是通过AKKAactor来做的,也

  • Spark SQL数据加载和保存实例讲解

    一.前置知识详解 Spark SQL重要是操作DataFrame,DataFrame本身提供了save和load的操作, Load:可以创建DataFrame, Save:把DataFrame中的数据保存到文件或者说与具体的格式来指明我们要读取的文件的类型以及与具体的格式来指出我们要输出的文件是什么类型. 二.Spark SQL读写数据代码实战 import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD;

  • Spark整合Mongodb的方法

    Spark介绍 按照官方的定义,Spark 是一个通用,快速,适用于大规模数据的处理引擎. 通用性:我们可以使用Spark SQL来执行常规分析, Spark Streaming 来流数据处理, 以及用Mlib来执行机器学习等.Java,python,scala及R语言的支持也是其通用性的表现之一. 快速: 这个可能是Spark成功的最初原因之一,主要归功于其基于内存的运算方式.当需要处理的数据需要反复迭代时,Spark可以直接在内存中暂存数据,而无需像Map Reduce一样需要把数据写回磁盘

  • Spark SQL操作JSON字段的小技巧

    前言 介绍Spark SQL的JSON支持,这是我们在Databricks中开发的一个功能,可以在Spark中更容易查询和创建JSON数据.随着网络和移动应用程序的普及,JSON已经成为Web服务API以及长期存储的常用的交换格式.使用现有的工具,用户通常会使用复杂的管道来在分析系统中读取和写入JSON数据集.在Apache Spark 1.1中发布Spark SQL的JSON支持,在Apache Spark 1.2中增强,极大地简化了使用JSON数据的端到端体验. 很多时候,比如用struct

  • mysql中取出json字段的小技巧

    目录 mysql取出json字段技巧 mysql中使用函数JSON_EXTRACT() spark sql中使用get_json_object() mysql取json,在不知道key情况下,取他的value详细值 mysql取出json字段技巧 有时候会将一些信息以json形式存在数据库中,如果太长的话,在取的过程中sql运行会比较慢,如果只取某些键值的话会比较浪费 mysql中使用函数JSON_EXTRACT() ±-±------------------------------------

  • Apache Hudi集成Spark SQL操作hide表

    目录 1. 摘要 2. 环境准备 2.1 启动spark-sql 2.2 设置并发度 3. Create Table 4. Insert Into 4.1 Insert 4.2 Select 5. Update 5.1 Update 5.2 Select 6. Delete 6.1 Delete 6.2 Select 7. Merge Into 7.1 Merge Into Insert 7.2 Select 7.4 Merge Into Update 7.5 Select 7.6 Merge

  • 解决SQL Server无法启动的小技巧

    SQL Server无法启动主要的原因在登录上,下面就教您一个解决SQL Server无法启动的小技巧,如果您也遇到过SQL Server无法启动的问题,不妨一看. SQLServer有时候会无法正确启动,这是因为Executive服务无法登录引起的.其中一个主要原因就是LocalSystemAccount和AdministratorGroup无法完全控制两个注册表项. 1)打开"开始"菜单并选择"运行".单击"浏览"按钮开始浏览直到找到Wind

  • Golang中使用JSON的一些小技巧分享

    前言 有的时候上游传过来的字段是string类型的,但是我们却想用变成数字来使用. 本来用一个json:",string" 就可以支持了,如果不知道golang的这些小技巧,就要大费周章了. 参考文章: JSON and struct composition in Go 临时忽略struct字段 type User struct { Email string `json:"email"` Password string `json:"password&qu

  • 在asp.net中操作sql server数据库的一些小技巧

    1.给数据库语句参数传递 向数据库操作语句传递参数可以通过存储过程实现,这里给出另外两种简便易捷的方法: 可以在C#中通过字符串操作将参数直接传入SQL语句变量中,例如: string s="Davolio"; string sql= "select * from employees where LastName="+"'"+s+"'" 相当于写入SQL语句: select * from employees where Las

  • MySql insert插入操作的3个小技巧分享

    1.插入的数据来源自其他表 表A有id, cola 字段 表B有id, cola, colb...等字段,其中id都为主键,cola为相同名字的列 现想将表B中colb>1000的记录都插入表A中,SQL语句可以这样写: 复制代码 代码如下: insert into A(id,cola) select id,cola from B where colb>1000 2.插入时排除(忽略)重复记录 现表A中有一部分记录了,再做如1中的插入操作可能遇到重复的key导致操作失败 复制代码 代码如下:

  • Spark SQL 2.4.8 操作 Dataframe的两种方式

    目录 一.测试数据 二.创建DataFrame 方式一:DSL方式操作 方式二:SQL方式操作 一.测试数据 7369,SMITH,CLERK,7902,1980/12/17,800,20 7499,ALLEN,SALESMAN,7698,1981/2/20,1600,300,30 7521,WARD,SALESMAN,7698,1981/2/22,1250,500,30 7566,JONES,MANAGER,7839,1981/4/2,2975,20 7654,MARTIN,SALESMAN,

  • MySQL之JSON类型字段的使用技巧分享

    目录 准备工作 JSON对象基础操作 JSON数组操作 更多操作 JSON字段在JAVA中的实践 测试环境: MySQL8.0.19 准备工作 CREATE TABLE json_demo ( `id` INT ( 11 ) NOT NULL PRIMARY KEY, `content` json NOT NULL ); INSERT INTO json_demo ( id, content ) VALUES /*这条是数组*/ ( 1, '[{"key": 1, "orde

  • SQL Server解析/操作Json格式字段数据的方法实例

    目录 1 json存储 2 json操作 3其他 总结 1 json存储 在sqlserver 中存储json ,需要用字符串类型进行存储,一般用nvarchar()或 varchar()进行存储,不要用text进行存储,用text时候,json的函数不支持. 2 json操作 主要介绍5个函数: (1)openJson:打开Json字符串 (2)IsJson:判断一个字符串是不是合法的Json格式.是返回1,否返回0,null返回null. (3)Json_Value:从Json字符串中提取值

随机推荐