Spark学习笔记(六)

Json-SparkSQL
JSON的流行

特点:简单,重点内容紧凑,易于阅读

  • 灵活的模式
    • 每个JSON对象都是自描述的
  • Web服务之间的的数据交换格式
    • 例如:Facebook和Twitter API
  • 高度用于移动和Web应用程序开发
    • 大量的JSON数据集

JSON的灵活性使得生成JSON数据集变得容易,But,JSON的灵活性使得难以分析JSON数据集。

Difference:
- 定义模式的难度
- 复杂结构
- 非均匀模式
- 多类型字段

  • 维护模式的难度
  • 模式的频繁更改(例如,应用程序已经
    进化)

  • 访问JSON数据集中的字段时遇到问题

    • 许多嵌套结构
    • 复杂结构

现有方法

  • ETL

    • 优点:易于访问字段
    • 缺点:(1)定义和维护模式和(2)ETL过程可能需要很长时间
  • 自定义JSON SerDes

    • 优点:(1)可以处理新鲜数据,(2)易于访问字段
    • 缺点:定义模式
  • 将JSON对象存储在LOB列中

    • 优点:(1)可以处理新鲜数据和(2)读取模式
    • 缺点:查询中需要很多UDF

An example of using UDFs

{
"name":"Yin",
"age":null,
"address":
{
"city":"Columbus",
"state":"Ohio"
}
}

Goal:

SELECT name, age, address.city, address.state FROM jsonTable

With UDFs:

SELECT v1.name,v1.age,v2.city,v2.state
FROM jsonTable jt
LATERAL VIEW json_tuple(
jt.json, 'name','age','address')
v1as name,age,address
 LATERAL VIEW json_tuple(
v1.address,'city','state')v2 as city,state;

JSON support in Spark

无强制ETL处理、自动推断模式、无需使用UDF和容易写查询

实例分析
步骤1:
加载数据集
第2步:
将数据集注册为表开始处理数据集:(以自然的方式编写您的查询,而不使用UDF)
58

接口:
//data.json (text file)(一行一个对象)
sqlContext.jsonFile(“data.json”)
//data:RDD[String](一个记录一个对象)
sqlContext.jsonRDD(data)

json串的所有可能的类型:
56

解决类型冲突(原始类型)

  • 扩大类型:两种数字类型之间的冲突

NULL => INT => LONG => DOUBLE => DECIMAL

  • 下转到字符串
    • 字符串类型和数字类型之间的冲突
    • 字符串类型和布尔类型之间的冲突
    • 布尔类型和数字类型之间的冲突

66
age被提升为数值;当我们不能 提升置为null


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值