Spark SQL JSON数据处理

背景

这一篇可以说是“Hive JSON数据处理的一点探索”的兄弟篇。

平台为了加速即席查询的分析效率,在我们的Hadoop集群上安装部署了Spark Server,并且与我们的Hive数据仓库共享元数据。也就是说,我们的用户即可以通过HiveServer2使用Hive SQL执行MapReduce分析数据,也可以使用SparkServer使用Spark SQL(Hive SQL)执行Spark Application分析数据。

两者除去MapReduce和Spark Application计算模式的不同之外,Spark Server的优势在于它的Container进程是常驻的,也就是说它的计算资源是预留的,接收到SQL语句之后可以立即执行,响应速度更加迅速。

既然Spark Server和HiveServer2共享元数据,我们应该能够在SQL层面最大限度地屏蔽两者之间的差异。虽然Spark官方声称兼容大多数Hive SQL语句,但实际使用当中却经常出现各种异常。

本文所要讨论的就是Spark SQL使用Hive内建函数json_tuple的异常问题。

我们还是借用“Hive JSON数据处理的一点探索”中的示例数据表来说明问题。

(1)通过HiveServer2来执行Hive SQL语句;

(2)通过Spark Server来执行Hive SQL语句;

终端异常信息为:Error: java.lang.ClassNotFoundException: json_tuple (state=,code=0)

Spark Server日志输出为:

网上也有相关信息的讨论:http://mail-archives.us.apache.org/mod_mbox/spark-user/201504.mbox/%[email protected].com%3E

怀疑的问题为找不到相应的jar包,其实实际问题是UDF解析类名错误,json_tuple为函数名称,其对应的类名应为org.apache.hadoop.hive.ql.udf.generic.GenericUDTFJSONTuple。

这个异常直接影响到我们使用Hive UDF json_tuple通过Spark Server分析JSON数据。

方案

为了达到“Hive JSON数据处理的一点探索”中数据表myjson最后的查询效果,我们需要使用Hive UDF get_json_object来实现,如下:

由get_tuple和func.json_array结合使用的方案变为get_json_object和func.json_array结合使用的方案。可以看出这种方案虽然繁杂,但可以应对实际问题。

时间: 2024-08-03 04:26:03

Spark SQL JSON数据处理的相关文章

Spark之json数据处理

-- 默认情况下,SparkContext对象在spark-shell启动时用namesc初始化.使用以下命令创建SQLContext. val sqlcontext = new org.apache.spark.sql.SQLContext(sc) -- employee.json-将此文件放在currentscala>指针所在的目录中. { {"id" : "1201", "name" : "satish", &qu

Spark SQL大数据处理并写入Elasticsearch

SparkSQL(Spark用于处理结构化数据的模块) 通过SparkSQL导入的数据可以来自MySQL数据库.Json数据.Csv数据等,通过load这些数据可以对其做一系列计算 下面通过程序代码来详细查看SparkSQL导入数据并写入到ES中: 数据集:北京市PM2.5数据 Spark版本:2.3.2 Python版本:3.5.2 mysql-connector-java-8.0.11 下载 ElasticSearch:6.4.1 Kibana:6.4.1 elasticsearch-spa

Spark SQL之External DataSource外部数据源(二)源代码分析

上周Spark1.2刚公布,周末在家没事,把这个特性给了解一下,顺便分析下源代码,看一看这个特性是怎样设计及实现的. /** Spark SQL源代码分析系列文章*/ (Ps: External DataSource使用篇地址:Spark SQL之External DataSource外部数据源(一)演示样例 http://blog.csdn.net/oopsoom/article/details/42061077) 一.Sources包核心 Spark SQL在Spark1.2中提供了Exte

Spark SQL之External DataSource外部数据源(一)示例

一.Spark SQL External DataSource简介 随着Spark1.2的发布,Spark SQL开始正式支持外部数据源.Spark SQL开放了一系列接入外部数据源的接口,来让开发者可以实现. 这使得Spark SQL支持了更多的类型数据源,如json, parquet, avro, csv格式.只要我们愿意,我们可以开发出任意的外部数据源来连接到Spark SQL.之前大家说的支持HBASE,Cassandra都可以用外部数据源的方式来实现无缝集成. (Ps: 关于Exter

Spark SQL之External DataSource外部数据源(二)源码分析

上周Spark1.2刚发布,周末在家没事,把这个特性给了解一下,顺便分析下源码,看一看这个特性是如何设计及实现的. /** Spark SQL源码分析系列文章*/ (Ps: External DataSource使用篇地址:Spark SQL之External DataSource外部数据源(一)示例 http://blog.csdn.net/oopsoom/article/details/42061077) 一.Sources包核心 Spark SQL在Spark1.2中提供了External

第十一篇:Spark SQL 源码分析之 External DataSource外部数据源

上周Spark1.2刚发布,周末在家没事,把这个特性给了解一下,顺便分析下源码,看一看这个特性是如何设计及实现的. /** Spark SQL源码分析系列文章*/ (Ps: External DataSource使用篇地址:Spark SQL之External DataSource外部数据源(一)示例 http://blog.csdn.net/oopsoom/article/details/42061077) 一.Sources包核心 Spark SQL在Spark1.2中提供了External

spark sql 怎样处理日期类型

spark sql 怎样处理日期类型.时间类型 json 每个对象 不能换行 ##问题描述 json File 日期类型 怎样处理?怎样从字符型,转换为Date或DateTime类型? json文件如下,有字符格式的日期类型 ``` { "name" : "Andy", "age" : 30, "time" :"2015-03-03T08:25:55.769Z"} { "name" :

12.spark sql之读写数据

简介 ??Spark SQL支持多种结构化数据源,轻松从各种数据源中读取Row对象.这些数据源包括Parquet.JSON.Hive表及关系型数据库等. ??当只使用一部分字段时,Spark SQL可以智能地只扫描这些字段,而不会像hadoopFile方法一样简单粗暴地扫描全部数据. Parquet ??Parquet是一种流行的列式存储格式,可以高效地存储具有嵌套字段的记录.Parquet自动保存原始数据的类型,当写入Parquet文件时,所有的列会自动转为可空约束. scala // Enc

spark结构化数据处理:Spark SQL、DataFrame和Dataset

本文讲解Spark的结构化数据处理,主要包括:Spark SQL.DataFrame.Dataset以及Spark SQL服务等相关内容.本文主要讲解Spark 1.6.x的结构化数据处理相关东东,但因Spark发展迅速(本文的写作时值Spark 1.6.2发布之际,并且Spark 2.0的预览版本也已发布许久),因此请随时关注Spark SQL官方文档以了解最新信息. 文中使用Scala对Spark SQL进行讲解,并且代码大多都能在spark-shell中运行,关于这点请知晓. 概述 相比于