1.用户自定义schema

data

json串格式如下:

{
"partner_code": "demo",
"app_name": "web",
"person_info": {
"name": "张三",
"age": 18
},
"items": [
{
"item_id": 1,
"item_name": "王家村",
"group": "group1"
},
{
"item_id": 2,
"item_name": "李家澡堂",
"item_detail": {
"platform_count": 2
},
"group": "group2"
}
]
}

spark1.3

在spark1.3我们是这样处理的

//定义schema
val struct =StructType(
StructField("partner_code", StringType, true) ::
StructField("app_name", StringType, true)::
StructField("person_info",MapType(StringType,StringType,true)) ::
StructField("items",ArrayType(MapType(StringType,StringType,true))) ::
Nil) val data = sc.textFile("path/jsonFile")
val df = sqlContext.jsonRDD(data,struct)
df.printSchema
df.show

spark1.4

//定义schema
val struct =StructType(
StructField("partner_code", StringType, true) ::
StructField("app_name", StringType, true)::
StructField("person_info",MapType(StringType,StringType,true)) ::
StructField("items",ArrayType(MapType(StringType,StringType,true))) ::
Nil) val df = sqlContext.read.schema(struct).json("path/jsonFile")

输出结果

//df.printSchema
root
|-- partner_code: string (nullable = true)
|-- app_name: string (nullable = true)
|-- person_info: map (nullable = true)
| |-- key: string
| |-- value: string (valueContainsNull = true)
|-- items: array (nullable = true)
| |-- element: map (containsNull = true)
| | |-- key: string
| | |-- value: string (valueContainsNull = true) //df.show
+------------+--------+--------------------+--------------------+
|partner_code|app_name| person_info| items|
+------------+--------+--------------------+--------------------+
| demo| web|Map(name -> 张三, a...|List(Map(item_id ...|
+------------+--------+--------------------+--------------------+

系统自动生成schema

直接使用自带的解析会更方便,不过那样会产生大量的struct结构,同时如果结构复杂多变将会产生大量的空值。

//不需要定义schema,系统自动判断生成
val df = sqlContext.read.json("path/jsonFile")
df.printSchema
df.show

输出结果

//df.printSchema
root
|-- app_name: string (nullable = true)
|-- items: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- group: string (nullable = true)
| | |-- item_detail: struct (nullable = true)
| | | |-- platform_count: long (nullable = true)
| | |-- item_id: long (nullable = true)
| | |-- item_name: string (nullable = true)
|-- partner_code: string (nullable = true)
|-- person_info: struct (nullable = true)
| |-- age: long (nullable = true)
| |-- name: string (nullable = true) //df.show
+--------+--------------------+------------+-----------+
|app_name| items|partner_code|person_info|
+--------+--------------------+------------+-----------+
| web|List([group1,null...| demo| [18,张三]|
+--------+--------------------+------------+-----------+

SparkSQL JSON数据操作(1.3->1.4)的更多相关文章

  1. python 发送json数据操作实例分析 - python

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 本文实例讲述了python 发送json数据操作.分享给大家供大家参考,具体如下: # !/usr/bin/env py ...

  2. JSON 数据操作

    2018,狗年.如果在你出生日期的年份上加12等于2018的话,私聊我,今年是你的本命年,你得发红包!!! 子(鼠).丑(牛).寅(虎).卯(兔).辰(龙).巳(蛇).午(马).未(羊).申(猴).酉 ...

  3. ajax 返回json数据操作

    例子: $.ajax({ url: "<?=Url::toRoute('add-all-staff')?>", type: 'get', dataType: 'json ...

  4. python json 数据操作

    python 有专门针对 json 操作的函数 #!/usr/bin/python3 import json mytest_js = { "a" : 1, "b" ...

  5. js常用JSON数据操作

    JSON字符串: var  str = '{"name": "jack", "age": 13}'; JSON对象: var obj = { ...

  6. json数据操作

    <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...

  7. Java读取json文件并对json数据进行读取、添加、删除与修改操作

    转载:http://blog.csdn.net/qing_yun/article/details/46865863#t0   1.介绍 开发过程中经常会遇到json数据的处理,而单独对json数据进行 ...

  8. js之操作JSON数据

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意 ...

  9. js中如何操作json数据

    一.要想熟练的操作json数据,就先要了解json数据的结构,json有两种结构:对象和数组. 1.对象 一个对象以“{”开始,“}”结束.每个“名称”后跟一个“:”:“‘名称/值’ 对”之间使用“, ...

随机推荐

  1. aspx页面Page_Load和aspx页面上控件Page_Load事件执行顺序

    今天公司的同事问了我一个问题,就是页面的Load方法和控件上的Load方法执行顺序的问题,看完了这个图片的递归调用之后大家就笑了,吼吼.

  2. java的Random

    首先,Point类 public class Point { int x, y; public Point(int x, int y) { this.x = x; this.y = y; } bool ...

  3. QGridLayout--01

    #include "mainwindow.h" #include <QApplication> #include<QLabel> #include<Q ...

  4. xcode5 和code6中push后方法执行的先后问题

    在xocde5中 执行的顺序是 prepareForSegue  .viewDidLoad. didSelectRowAtIndexPath,在xcode6中 执行的顺序是  prepareForSe ...

  5. 图解SSL/TLS协议

    本周,CloudFlare宣布,开始提供Keyless服务,即你把网站放到它们的CDN上,不用提供自己的私钥,也能使用SSL加密链接. 我看了CloudFlare的说明(这里和这里),突然意识到这是绝 ...

  6. sql server 数据库还原

    1. 用sa身份或Windows Authentication登陆数据库 2.鼠标右击DataBases选New Database 3.填写DataBase name,选择Database files ...

  7. JVM底层又是如何实现synchronized的

    目前在Java中存在两种锁机制:synchronized和Lock,Lock接口及其实现类是JDK5增加的内容,其作者是大名鼎鼎的并发专家Doug Lea.本文并不比较synchronized与Loc ...

  8. line-block代替float布局;

    line-block代替float布局: 我们先看看float的一些特性(特征) 当我们改变浏览器的大小会出现这样的效果: 或则这样: 有时候,我们希望,以第一排最高的元素为换行基准时,我们就可以使用 ...

  9. http://blog.csdn.net/littlechang/article/details/8642149

    http://blog.csdn.net/littlechang/article/details/8642149

  10. iOS基础

    1.属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那种情况下用? readwrite 是可读可写特性:需要生成getter方法和s ...