Spark SQL数据源:JSON数据集

文章目录

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


一、读取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文件
在这里插入图片描述

{"name": "张三", "gender": "女", "age": 18}
{"name": "李四", "gender": "男", "age": 35}
{"name": "王五", "gender": "女", "age": 24}

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

{"name": "张三", "score": 98}
{"name": "李四", "score": 88}
{"name": "王五", "score": 91}

上传到HDFS的/input目录
在这里插入图片描述

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

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

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

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

执行命令:val scoredf = spark.read.json(“hdfs://master:9000/input/score.json”)
在这里插入图片描述
查看成绩数据帧的内容,执行命令:scoredf.show()
在这里插入图片描述

创建临时表t_score,执行命令:scoredf.createTempView(“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”)
在这里插入图片描述
查看结果数据帧的内容,执行命令:resultdf.show()
在这里插入图片描述

(三)利用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()方法的参数)
在这里插入图片描述
显示用户数据帧的内容,执行命令:userdf.show()
在这里插入图片描述

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

创建Dataset2DataFrame单例对象
在这里插入图片描述

package net.army.sql.day01

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

/**
 * 功能:利用json()方法将数据集转成数据帧
 * 日期:2023年06月14日
 * 作者:梁辰兴
 */
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()
  }
}

运行程序,查看结果
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

驱动开发:内核遍历文件或目录

在笔者前一篇文章《驱动开发:内核文件读写系列函数》简单的介绍了内核中如何对文件进行基本的读写操作,本章我们将实现内核下遍历文件或目录这一功能,该功能的实现需要依赖于ZwQueryDirectoryFile这个内核API函数来实现,该函数可返…

Java蓝桥杯

目录 往年真题 题目分类 搜索 动态规划 并查集 贪心算法 二分查找 输入输出 图论 其他 往年真题 2022年第十三届蓝桥杯大赛软件类决赛Java研究生组真题 - 题库 - C语言网 2021年蓝桥杯第十二届省赛及国赛真题 - 题库 - C语言网 2020年蓝桥杯第十一届省赛及国赛真题…

Nginx网站服务

文章目录 Nginx网站服务一.Nginx服务基础1.关于Nginx2.Nginx和Apache的差异:3.编译安装Nginx服务(1)关闭防火墙(2)安装依赖包(3)创建运行用户、组(Nginx服务程序默认以nobody身份运行,建议为其创建专门的用户账号,以便更准确地控制…

深眸科技专注机器视觉的研发与创新,开启工业自动化、智能化进程

在智能制造、工业效能提升的社会背景之下,中国制造2025战略持续落实,工业制造业转型升级加速,作为人工智能领域重要技术之一的机器视觉,凭借着高精度、高准确度等优势检测能力,不断渗透进工业领域,并呈现出…

oVirt 4.4.10三节点超融合集群安装配置及集群扩容(三)

本篇主要记录安装及使用过程中遇到的问题<包含4.4.x, 4.5.x> 设置engine管理页面可以通过IP访问ssh连接engine服务器并在/etc/ovirt-engine/engine.conf.d新建99-custom-sso-setup.conf,添加engine节点的IP或出口IPSSO_ALTERNATE_ENGINE_FQDNS="engine103.cluster.…

day54_spring整合mybatis

SpringMybatis整合【重点】 Spring学完了,主要学习Spring两个内容:IOCAOP 利用这两个知识来完成spring和mybatis的整合 IOC: 控制反转,用来创建对象 XxxService通过数据源创建数据库连接创建SqlSessionFactory创建SqlSession获得XxxMapper代理对象 AOP: 面向切面 控制事务 具体…

STM32——08-STM32感应开关盖垃圾桶

项目二&#xff1a;感应开关盖垃圾桶 项目需求 检测靠近时&#xff0c;垃圾桶自动开盖并伴随滴一声&#xff0c; 2 秒后关盖 发生震动时&#xff0c;垃圾桶自动开盖并伴随滴一声&#xff0c; 2 秒后关盖 按下按键时&#xff0c;垃圾桶自动开盖并伴随滴一声&#xff0c; 2 秒后…

插件化工程R文件瘦身技术方案 | 京东云技术团队

随着业务的发展及版本迭代&#xff0c;客户端工程中不断增加新的业务逻辑、引入新的资源&#xff0c;随之而来的问题就是安装包体积变大&#xff0c;前期各个业务模块通过无用资源删减、大图压缩或转上云、AB实验业务逻辑下线或其他手段在降低包体积上取得了一定的成果。 在瘦…

【2023年最新】提高分类模型指标的六大方案详解

文章目录 数据增强特征选择调整模型参数模型集成迁移学习模型解释完结 当今&#xff0c;机器学习模型得到了广泛的应用&#xff0c;其中分类模型是其中最常见和重要的一种。在实际应用中&#xff0c;如何提高分类模型的指标&#xff0c;使其在不同场景下表现更佳并且具有更好的…

Vue中如何进行音频可视化与音频频谱展示

Vue中如何进行音频可视化与音频频谱展示 随着音频应用程序的不断发展&#xff0c;音频可视化和音频频谱展示成为了重要的功能。在Vue应用程序中实现音频可视化和音频频谱展示可以帮助用户更好地了解音频文件的内容和特征。本文将介绍如何在Vue应用程序中实现音频可视化和音频频…

《嵌入式系统》知识总结10:使用位带操作操纵GPIO

位操作 汇编层面 外设控制常要针对字中某个位&#xff08;Bit&#xff09;操作 以字节编址的存储器地址空间中&#xff0c;需要3步骤&#xff08;读出-修改-写回&#xff09; 1.&#xff08;从外设&#xff09;读取包含该位的字节数据 2. 设置该位为0或1、同时屏蔽其他位&am…

POI in Action

1 POI 组件依赖 按需引入对应依赖 (给出官方的指引) 组件作用Maven依赖POIFSOLE2 FilesystempoiHPSFOLE2 Property SetspoiHSSFExcel XLSpoiHSLFPowerPoint PPTpoi-scratchpadHWPFWord DOCpoi-scratchpadHDGFVisio VSDpoi-scratchpadHPBFPublisher PUBpoi-scratchpadHSMFOutl…

【gitflow】 概念基本介绍

gitflow 简介 什么是gitflow&#xff1f; 我们大家都很会用git&#xff0c;但是我们很少去关心我们要怎么用branch和版本控制。 只知道master是第一个主分支&#xff0c;其他分支都是次要分支&#xff0c; 那你知道如下的问题如何回答吗&#xff1f; 如何保证主分支的稳定…

【哈佛积极心理学笔记】第22讲 自尊与自我实现

第22讲 自尊与自我实现 Unconditional self-esteem is the highest level, the level that Maslow would talk about “the self-actualization”, what David Schnarch talks about as “differentiated” or at the level of being known rather than desiring to be valida…

C语言复合类型之结构(struct)篇(结构指针)

结构相关知识总结 什么是结构&#xff1f;结构的声明与简单使用结构的初始化结构中成员变量的访问结构的初始化器结构数组结构数组的声明结构数组的成员标识 结构的嵌套结构指针结构作为参数在函数中传递将结构成员作为参数进行传递将结构地址(指向结构的指针)作为参数进行传递…

C语言进阶--指针(C语言灵魂)

目录 1.字符指针 2.指针数组 3.数组指针 4.数组参数与指针参数 4.1.一维数组传参 4.2.二维数组传参 4.3.一级指针传参 4.4.二级指针传参 5.函数指针 6.函数指针数组 7.指向函数指针数组的指针 8.回调函数 qsort函数 9.指针和数组笔试题 10.指针笔试题 前期要点回…

Linux学习[16]bash学习深入2---别名设置alias---history指令---环境配置相关

文章目录 前言1. alias2. history3. 环境配置相关总结 前言 linux学习15里面简单提了一下alias指令&#xff0c;就表明它是一个别名的作用&#xff0c;这节就展开来写一下。 同时上一节一笔带过的history指令&#xff0c;这一节也进行例子的演示记录。 最后是环境相关的配置&a…

常用API(String,ArrayList)

1:String类概述 String是字符串类型&#xff0c;可以定义字符串变量指向字符串对象String是不可变字符串的原因&#xff1f;1.String变量每次的修改都是产生并指向新的字符串对象。2.原来的字符串对象都是没有改变的&#xff0c;所以称不可变字符串。 2&#xff1a;String创建…

八股文总结

文章目录 项目介绍1.不动产项目项目难点机器学习算法调研图像提取算法调研数据集-ImageNetXceptionVGGInceptionDensenetMobilenet 系统流程图 2.图书项目技术栈ShiroMybatisMyBatis:Mybatis Plus: 面试问题 Java基础基本数据类型反射接口和抽象类异常代理模式1. 静态代理2. 动…

『DevOps最佳实践』使用Jenkins和Harbor进行持续集成和交付的解决方案

&#x1f4e3;读完这篇文章里你能收获到 全文采用图文形式讲解学会使用Harbor配置项目学会在Jenkins中配置Harbor推送权限使用Jenkins和Harbor进行持续集成的实践感谢点赞收藏&#xff0c;避免下次找不到~ 文章目录 一、准备工作1. 环境准备2. 修改Docker配置文件3. Docker登陆…