Spark高级操作之json复杂和嵌套数据结构的操作

本文介绍了Spark2.0及以上版本中处理复杂嵌套json数据的方法,包括get_json_object(), from_json(), to_json(), explode(), 和 selectExpr()。通过案例展示了如何抽取json字段、创建DataFrame、转化json数据并将其写入Kafka或Parquet文件。" 8201900,1372132,C/C++中Static、Const、Extern和Volatile关键字详解,"['C语言', 'C++', '编程概念', '变量修饰符', '函数修饰']
摘要由CSDN通过智能技术生成

一,基本介绍

本文主要讲spark2.0版本以后存在的Sparksql的一些实用的函数,帮助解决复杂嵌套的json数据格式,比如,map和嵌套结构。Spark2.1在spark 的Structured Streaming也可以使用这些功能函数。

下面几个是本文重点要讲的方法。

A),get_json_object()

B),from_json()

C),to_json()

D),explode()

E),selectExpr()

二,准备阶段

首先,创建一个没有任何嵌套的JSon Schema

import org.apache.spark.sql.types._
import org.apache.spark.sql.functions._

val jsonSchema = new StructType().add("battery_level", LongType).add("c02_level",LongType).
add("cca3",StringType).add("cn", StringType).add("device_id",LongType).add("device_type", StringType).
add("signal", LongType).add("ip",StringType).add("temp", LongType).add("timestamp", TimestampType)

使用上面的schema,我在这里创建一个Dataframe,使用的是scala 的case class,同时会产生一些json格式的数据。当然,生产中这些数据也可以来自于kafka。这个case class总共有两个字段:整型(作为device id)和一个字符串(json的数据结构,代表设备的事件)

// define a case class
case class DeviceData (id: Int, device: String)
// create some sample data
val eventsDS = Seq (
(0, “”"{“device_id”: 0, “device_type”: “sensor-ipad”, “ip”: “68.161.225.1”, “cca3”: “USA”, “cn”: “United States”, “temp”: 25, “signal”: 23, “battery_level”: 8, “c02_level”: 917, “timestamp” :1475600496 }"""),
(1, “”"{“device_id”: 1, “device_type”: “sensor-igauge”, “ip”: “213.161.254.1”, “cca3”: “NOR”, “cn”: “Norway”, “temp”: 30, “signal”: 18, “battery_level”: 6, “c02_level”: 1413, “t

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值