Spark大数据处理讲课笔记4.4 Spark SQL数据源 - JSON数据集

news2025/1/20 16:59:22

文章目录

  • 零、本讲学习目标
  • 一、读取JSON文件概述
  • 二、读取JSON文件案例演示
    • (一)创建JSON文件并上传到HDFS
    • (二)读取JSON文件,创建临时表,进行关联查询
      • 1、读取user.json文件,创建临时表t_user
      • 2、读取score.json文件,创建临时表t_score
      • 3、关联查询生成新的数据帧
    • (三)利用json()方法将数据集转成数据帧
      • 1、在Spark Shell里交互式完成任务
      • 2、在IDEA里编写Scala程序完成任务

零、本讲学习目标

  1. 掌握如何读取JSON文件
  2. 掌握如何进行关联查询

一、读取JSON文件概述

  • Spark SQL可以自动推断JSON文件的Schema,并将其加载为DataFrame。在加载和写入JSON文件时,除了可以使用load()方法和save()方法外,还可以直接使用Spark SQL内置的json()方法。该方法不仅可以读写JSON文件,还可以将Dataset[String]类型的数据集转为DataFrame。
  • 需要注意的是,要想成功地将一个JSON文件加载为DataFrame,JSON文件的每一行必须包含一个独立有效的JSON对象,而不能将一个JSON对象分散在多行。

二、读取JSON文件案例演示

(一)创建JSON文件并上传到HDFS

  • 创建user.json文件
    在这里插入图片描述
  • 上传到HDFS的/input目录
    在这里插入图片描述
  • 创建score.json文件
    在这里插入图片描述
  • 上传到HDFS的/input目录
    在这里插入图片描述

(二)读取JSON文件,创建临时表,进行关联查询

1、读取user.json文件,创建临时表t_user

  • 执行命令:val userdf = spark.read.json("hdfs://master:9000/input/user.json")
    在这里插入图片描述
  • 查看用户数据帧的内容
    在这里插入图片描述
  • 创建临时表t_user
    在这里插入图片描述

2、读取score.json文件,创建临时表t_score

  • 执行命令:val scoredf = spark.read.json("hdfs://master:9000/input/score.json")
    在这里插入图片描述
  • 查看成绩数据帧的内容
    在这里插入图片描述
  • 创建临时表t_score
    在这里插入图片描述

3、关联查询生成新的数据帧

  • 执行命令:val resultdf = spark.sql("select u.name, u.age, s.score from t_user u inner join t_score s on u.name = s.name")
    在这里插入图片描述
  • 查看结果数据帧的内容
    在这里插入图片描述

(三)利用json()方法将数据集转成数据帧

1、在Spark Shell里交互式完成任务

  • 创建用户数组:执行命令:val userarr = Array("{'name': 'Mike', 'age': 18}", "{'name': 'Alice', 'age': 30}", "{'name': 'Brown', 'age': 38}")
    在这里插入图片描述
  • 基于用户数组创建用户数据集,执行命令:val userds = spark.createDataset(userarr)
    在这里插入图片描述
  • 将用户数据集转成用户数据帧,执行命令:val userdf = spark.read.json(userds.rdd)(注意要将数据集转成RDD才能作为json()方法的参数)
    在这里插入图片描述
  • 显示用户数据帧的内容
    在这里插入图片描述

2、在IDEA里编写Scala程序完成任务

  • 创建Dataset2DataFrame单例对象
    在这里插入图片描述
package net.hw.sparksql

import org.apache.spark.sql.{Dataset, SparkSession}

/**
 * 功能:利用json()方法将数据集转成数据帧
 * 作者:华卫
 * 日期:2022年05月11日
 */
object Dataset2DataFrame {
  def main(args: Array[String]): Unit = {
    // 设置HADOOP用户名属性,否则本地运行访问会被拒绝
    System.setProperty("HADOOP_USER_NAME", "root")

    // 创建或得到SparkSession
    val spark = SparkSession.builder()
      .appName("SparkSQLDataSource")
      .master("local[*]")
      .getOrCreate()

    // 导入隐式转换
    import spark.implicits._
    // 创建用户数组
    val userarr = Array("{'name': 'Mike', 'age': 18}",
      "{'name': 'Alice', 'age': 30}",
      "{'name': 'Brown', 'age': 38}")
    // 基于用户数组创建用户数据集
    val userds: Dataset[String] = spark.createDataset(userarr)
    // 将用户数据集转成用户数据帧
    val userdf = spark.read.json(userds.rdd)
    // 显示用户数据帧内容
    userdf.show()
  }
}
  • 运行程序,查看结果
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/527621.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Liunx下的进程信号

文章目录 前言1.信号初识前置知识2.信号产生的方式1.键盘产生信号2.系统调用产生信号3.软件条件产生的信号4.硬件异常 3.信号的保存4.信号的处理1.用户态和内核态2.用户态和内核态的切换方式3.内核中信号的捕捉流程4.volatile关键字 前言 本文主要是对Liunx中进程信息进行讲解…

Spark大数据处理讲课笔记4.5 Spark SQL数据源 - Hive表

文章目录 零、本讲学习目标一、Spark SQL支持读写Hive二、Spark配置hive-site.xml三、准备工作(一)启动Hive的metastore(二)启动Spark Shell 四、Spark读写Hive数据(一)导入SparkSession(二&…

Spark大数据处理讲课笔记4.8 Spark SQL典型案例

文章目录 零、本讲学习目标一、使用Spark SQL实现词频统计(一)数据源 - words.txt(二)创建Maven项目(三)添加依赖和构建插件(四)修改源目录名称(五)创建日志属…

Linux——线程2|线程控制

什么是线程 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”。 一切进程至少都有一个执行线程 线程在进程内部运行,本质是在进程地址空间内运行 在Linux系统中,在CPU…

基于Java+SpringBoot+vue+node.js的智能农场管理系统详细设计和实现

基于JavaSpringBootvuenode.js的智能农场管理系统详细设计和实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码…

报表设计器Stimulsoft 2023.2提供深色主题和 Monoline 图标包

Stimulsoft Reports 是一款报告编写器,主要用于在桌面和Web上从头开始创建任何复杂的报告。可以在大多数平台上轻松实现部署,如ASP.NET, WinForms, .NET Core, JavaScript, WPF, Angular, Blazor, PHP, Java等,在你的应用程序中嵌入报告设计器…

【Vue】学习笔记-消息的订阅与发布

消息的订阅与发布(基本不用) 消息订阅与发布(pubsub)消息订阅与发布是一种组件间的通信的方式,适用于任意组件间通信 消息订阅与发布 1.订阅消息∶消息名 2.发布消息︰消息内容 消息订阅与发布的工作流程: (A是订阅者,B是发布…

软件安全开发意识

国务院印发的《“十四五”数字经济发展规划》中指出数字经济是继农业经济、工业经济之后的主要经济形态,是以数据资源为关键要素,以现代信息网络为主要载体,以信息通信技术融合应用、全要素数字化转型为重要推动力,促进公平与效率…

MYSQL高可用配置(MHA)

1、什么是MHA MHA(Master High Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换的过程中最大…

fastapi高性能异步框架,极速上手

fastapi项目开发快速上手 简介 FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6 并基于标准的 Python 类型提示。 特性: 快速:可与 NodeJS 和 Go 比肩的极高性能(归功于 Starlette 和…

全流程各工程类型地下水环境影响评价【一级】方法与MODFLOW Flex建模

目录 专题一 地下水基础知识学习 专题二 地下水环境影响评价过程讲解 专题三 地下水数值软件的学习及操作 专题四 相关专业软件(Surfer、Aquifer test)的学习 专题五 化工类建设项目地下水环评关键技术处理及上机操作 专题六 化工类建设项目地下水…

顶象助力如祺出行打造高品质服务

近日,广东省自然资源厅审批通过了如祺出行提交的测绘资质申请,如祺出行获得地理信息系统工程和互联网地图服务两个专业的乙级测绘资质。此次获批意味着,如祺出行能够在许可区域内依法合规开展数据标注和场景仿真等相关业务,构建全…

Oracle11g全新讲解之触发器和视图索引

触发器 1.触发器的基本讲解 当特定事件出现时自动执行的存储过程 语法结构 CREATE [OR REPLACE] TRIGGER trigger_name AFTER | BEFORE | INSTEAD OF [INSERT] [[OR] UPDATE [OF column_list]] [[OR] DELETE] ON table_or_view_name [REFERENCING {OLD [AS] old / NEW [AS]…

探索Jetpack Compose的Material You主题

探索Jetpack Compose的Material You主题 在本文中,我们将了解可用于 Jetpack Compose 的新 Material You 库,并了解我们如何将其动态颜色应用到 Stream Chat Compose SDK,以获得有趣、多彩和个性化的消息传递体验。 在本文中,您…

Spark大数据处理讲课笔记4.7 Spark SQL内置函数

文章目录 零、本讲学习目标一、Spark SQL内置函数(一)内置函数概述1、10类内置函数2、两种使用方式 (二)内置函数演示1、通过编程方式使用内置函数upper()2、通过SQL语句的方式使用内置函数upper()3、演示其它内置函数的使用 二、…

MySQL的安装和卸载-Linux版

MySQL8.0.26-Linux版安装 1. 准备一台Linux服务器 云服务器或者虚拟机都可以,Linux的版本为 CentOS7; 2. 下载Linux版MySQL安装包 https://download.csdn.net/download/weixin_44373940/87784825 3. 创建目录,并解压到对应目录中 mkdir mysql 解压到mysql目录中 tar -xvf…

【Arduino疑难杂症】:报错:上传失败:上传错误:exit status Oxffffffff

项目场景: 制作arduino宠物监控系统项目的过程中,摄像头方面使用到了ESP32Cam,制作过程中遇到了如下问题。 问题描述 [ERRORJ: (annot configure port, something wert wrong. 0riginal message: WindowsError(31,"xclxacxb…

Spring笔记-教程-快速回忆

title: Spring笔记 date: 2023-05-12 00:12:55 categories: 后端Java tags:JavaSpring Spring官网https://spring.io 框架图: 为什么要使用Spring 原先代码中存在的问题如下: 业务层: public class BookServiceImpl implements BookServi…

了解Swarm 集群管理

Swarm 集群管理 简介 Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。 支持的工具包括但不限…

SpringCache缓存常见问题

SpringCache 解决缓存常见问题 1 缓存穿透2 缓存雪崩3 缓存击穿 1 缓存穿透 缓存穿透是指缓存和数据库中都没有数据,而用户不断发起请求则这些请求会穿过缓存直接访问数据库,如发起为id为“-1”的数据或id为特别大不存在的数据。假如有恶意攻击&#xf…