4.2 Spark SQL数据源 - 基本操作

news2024/11/28 14:17:39

一、默认数据源

案例演示读取Parquet文件

查看Spark的样例数据文件users.parquet
在这里插入图片描述
在这里插入图片描述

1、在Spark Shell中演示
启动Spark Shell
在这里插入图片描述
在这里插入图片描述
查看数据帧内容
在这里插入图片描述
查看数据帧模式
在这里插入图片描述
对数据帧指定列进行查询,查询结果依然是数据帧,然后通过write成员的save()方法写入HDFS指定目录
在这里插入图片描述
查看HDFS上的输出结果
在这里插入图片描述
在这里插入图片描述
执行SQL查询
在这里插入图片描述
查看HDFS上的输出结果
在这里插入图片描述

课堂练习1、将4.1节的student.txt文件转换成student.parquet

得到学生数据帧 - studentDF
在这里插入图片描述
将学生数据帧保存为parquet文件
在这里插入图片描述
查看生成的parquet文件
在这里插入图片描述
复制parquet文件到/datasource/input目录
在这里插入图片描述

课堂练习2、读取student.parquet文件得到学生数据帧,并显示数据帧内容

在这里插入图片描述

2、在IntelliJ IDEA里演示
在这里插入图片描述
在这里插入图片描述
将java目录改成scala目录
在这里插入图片描述
在pom.xml文件里添加相关依赖,设置源程序文件夹
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>net.cxf.sql</groupId>
    <artifactId>SparkSQLDemo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>2.12.15</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.12</artifactId>
            <version>3.1.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_2.12</artifactId>
            <version>3.1.3</version>
        </dependency>
    </dependencies>
    <build>
        <sourceDirectory>src/main/scala</sourceDirectory>
    </build>
</project>

在这里插入图片描述

log4j.rootLogger=ERROR, stdout, logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spark.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property>
        <description>only config in clients</description>
        <name>dfs.client.use.datanode.hostname</name>
        <value>true</value>
    </property>
</configuration>

创建net.cxf.sql.day01包,在包里创建ReadParquetFile对象

package net.cxf.sql.day01
import org.apache.spark.sql.SparkSession
/**
 * 功能:读取Parquet文件
 * 作者:cxf
 * 日期:2023年06月07日
 */

object ReadParquetFile {
  def main(args: Array[String]): Unit = {
    // 创建或得到Spark会话对象
    val spark = SparkSession.builder()
      .appName("ReadParquetFile")
      .master("local[*]")
      .getOrCreate()
    // 加载student.parquet文件,得到数据帧
    val studentDF = spark.read.load("hdfs://master:9000/datasource/input/student.parquet")
    // 显示学生数据帧内容
    studentDF.show
    // 查询20岁以上的女生
    val girlDF = studentDF.filter("gender = '女' and age > 20")
    // 显示女生数据帧内容
    girlDF.show
    // 保存查询结果到HDFS(保证输出目录不存在)
    girlDF.write.save("hdfs://master:9000/datasource/output")
  }
}

运行程序,查看控制台结果
在这里插入图片描述
在HDFS查看输出结果
在这里插入图片描述

二、手动指定数据源

(一)案例演示读取不同数据源

1、读取csv文件
查看Spark的样例数据文件people.csv
在这里插入图片描述
将people.csv文件上传到HDFS的/datasource/input目录,然后查看文件内
在这里插入图片描述
读取人员csv文件,得到人员数据帧
在这里插入图片描述
查看人员数据帧内容
在这里插入图片描述
在这里插入图片描述
查看人员数据帧内容
在这里插入图片描述
在这里插入图片描述

2、读取json,保存为parquet
查看people.json文件
在这里插入图片描述
将people.json上传到HDFS的/datasource/input目录,并查看其内容
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
查看生成的parquet文件
在这里插入图片描述
在这里插入图片描述
现在读取/datasource/input/people.parquet文件得到人员数据帧
在这里插入图片描述
查看人员数据帧内容
在这里插入图片描述
3、读取jdbc数据源,保存为json文件
查看student数据库里的t_user表
在这里插入图片描述
报错,找不到数据库驱动程序com.mysql.jdbc.Driver
在这里插入图片描述
将数据库驱动程序上传到master虚拟机的/opt目录
在这里插入图片描述
将数据库驱动程序拷贝到$SPARK_HOME/jars目录,
在这里插入图片描述
加载jdbc数据源成功,但是有个警告,需要通过设置useSSL=false来消除
在这里插入图片描述
在这里插入图片描述
执行命令:userdf.show()
在这里插入图片描述
在这里插入图片描述
在虚拟机slave1查看生成的json文件
在这里插入图片描述

三、数据写入模式

案例演示不同写入模式

查看数据源
在这里插入图片描述
查询该文件name里,采用覆盖模式写入/result,/result目录里本来有东西的
在这里插入图片描述

在这里插入图片描述
导入SaveMode类
在这里插入图片描述
在slave1虚拟机上查看生成的json文件
在这里插入图片描述
查询age列
在这里插入图片描述
在slave1虚拟机上查看追加生成的json文件
在这里插入图片描述

四、分区自动推断

(一)分区自动推断概述

以people作为表名,gender和country作为分区列,给出存储数据的目录结构
在这里插入图片描述

(二)分区自动推断演示

1、建四个文件
在master虚拟机上/home里创建如下目录及文件,其中目录people代表表名,gender和country代表分区列,people.json存储实际人口数据
在这里插入图片描述
2、读取表数据
启动Spark Shell
在这里插入图片描述
在这里插入图片描述
3、输出Schema信息
在这里插入图片描述
4、显示数据帧内容
在这里插入图片描述

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

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

相关文章

还在为开发难度发愁?这个低代码平台能让你轻松搞定!

随着数字技术的不断发展&#xff0c;数字化也越来越深入人们的日常生活中&#xff0c;在这样的时代背景下&#xff0c;企业是需要通过不断创新来满足用户日益增长的业务需求。 使用背景 对企业而言&#xff0c;随着组织规模的扩大&#xff0c;各种业务流程系统需要持续而快速地…

浮点数的存储方式和取值范围

一、有符号整型的编码方式 1. 真值 把用""、"-"表示符号&#xff0c;数值部分用绝对值的编码的表示方式称为真值。 如3用4bit真值表示为0011&#xff0c;-1用真值表示为-0011。 2. 原码 符号位为0表示正数&#xff0c;符号位为1表示负数&#xff0c;数…

网络安全的究竟如何自学?

以十五派9年信息安全教育经验以及数千名学生摸索实践可以得知&#xff0c;在知乎上能够搜索到这个问题的人不外乎三种人&#xff1a; 第一种人在找网络安全入门的捷径&#xff1b; 第二种人想自己的方向进而获得认同感&#xff1b; 第三种人是已经在自学网络安全但是过程中碰…

卡尔曼滤波与组合导航原理(九)Sage-Husa自适应滤波

自适应滤波有很多种方式&#xff0c;也很实用 一、自适应滤波基本思想 函数模型 { X k Φ k / k − 1 X k − 1 Γ k − 1 W k − 1 Z k H k X k V k \left\{\begin{array}{l} \boldsymbol{X}_{k}\boldsymbol{\Phi}_{k / k-1} \boldsymbol{X}_{k-1}\boldsymbol{\Gamma}_{…

Mujoco xml编写(二)

目录 .1 运行 1.1 测试 .2 XML 2,1 基础 2.3 简单实例 2.3 进阶例子 .1 运行 1.1 测试 基于Mujoco210 Ubuntu 22.04配置安装_啥也不是的py人的博客-CSDN博客完成安装后 import mujoco_py import os mj_path mujoco_py.utils.discover_mujoco() xml_path os.path.join…

学习并深入理解闭包

前言 学习闭包前&#xff0c;先学点别的。 程序执行时&#xff1a; 1.编译阶段 创建变量对象GO&#xff0c;包括变量和函数作用域装在一块内存中。但是没有赋值&#xff0c;变量都是undefined,函数&#xff1a;0xxx 2.创建执行上下文 里面有VO对应ao(函数里的变量&#xff0…

数据结构 -- 跳跃链表

跳跃链表的概念 跳跃链表是有序链表的一个变种&#xff0c;在一个有序链表中&#xff0c;查找一个链表中的元素需要进行一次遍历&#xff0c;时间复杂度为O(n)&#xff0c;为了加快查找的过程&#xff0c;能够跳过某些元素呢&#xff1f;一个思路就是牺牲一定的空间换时间&…

入职外包一个月,我离职了

有一种打工人的羡慕&#xff0c;叫做“大厂”。 真是年少不知大厂香&#xff0c;错把青春插稻秧。 但是&#xff0c;在深圳有一群比大厂员工更庞大的群体&#xff0c;他们顶着大厂的“名”&#xff0c;做着大厂的工作&#xff0c;还可以享受大厂的伙食&#xff0c;却没有大厂…

Redis系列第一篇:ubuntu18.04下源码编译安装Redis 6.2.12

Redis&#xff08;Remote Dictionary Server )&#xff0c;即远程字典服务&#xff0c;是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。 Redis是一个key-value存储系统。和Memcached类似&#xff…

EasyExcel设置动态head数据(不是格式)及postman自测的坑

需求背景&#xff1a; 导出某某业务模块的数据&#xff0c;但是&#xff0c;数据列的标题内容是根据当前日期计算出来的。 比如今天是5月20&#xff0c;那么列就是 5/21 、 5/22…以此类推 问题&#xff1a; EasyExcel 通过Bean的注解实现匹配的&#xff0c;这是最便捷的方式&…

这5款小众又好用的软件,你都知道吗?

1.文件比较——WinMerge WinMerge是一款用于比较和合并文件和文件夹的工具。它可以让你对不同的文件和文件夹进行可视化的对比,并显示出差异和相似之处。WinMerge支持多种功能,如合并,同步,过滤,插件等。这款工具非常实用,但是可以提供强大的文件比较功能,是管理文件和解决冲突…

123 2021年国赛 二分搜索+前缀和

题目描述 小蓝发现了一个有趣的数列&#xff0c;这个数列的前几项如下&#xff1a; 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 小蓝发现&#xff0c;这个数列前 1 项是整数 1&#xff0c;接下来 2 项是整数 1 至 2&#xff0c;接下来 3 项是整数 1 至 3&#xff0c;接下来 4 项是整数…

day2 ARM处理器概论

目录 RISC处理器和CISC处理器 SOC(System on Chip) ARM指令集概述 指令集 ARM指令集 编译原理 ARM存储模型 ARM指令存储 ARM工作模式 工作模式的理解 ARM工作模式分类 RISC处理器和CISC处理器 RISC处理器 只保留常用的的简单指令&#xff0c;硬件结构简单&#xff0c;复…

你觉得你很优秀,为什么连一个软件测试面试都过不了?

目录 前言 简历请用数字化结果不要只是堆研工作经历 简历一:我的工作内容有 简历二:我的工作内容有: 当你和HR面对面坐下来时&#xff0c;迎接我们的第一个问题往往是:“来&#xff0c;请简单介绍下你自己吧。 了解你的过去是判断你未来的最好方式 增加好印象&#xff0c…

基于SVM的鸢尾花数据集回归分析

目录 1. 作者介绍2. SVM支持向量机算法2.1 鸢尾花数据集2.2 鸢尾花数据集可视化2.2.1 散点图2.2.2 箱型图2.2.3 三维散点图&#xff08;3D&#xff09; 3. SVM算法实现3.1 完整代码3.2 运行结果3.3 问题与分析 1. 作者介绍 张佳伦&#xff0c;男&#xff0c;西安工程大学电子信…

androidstudio ffmpeg 音频转换

java-ffmpeg-音频转换 需求描述功能流程所需条件步骤步骤1步骤2步骤3一些我使用中遇到的异常 需求描述 项目中的语音唤醒后的语音识别人声检测一直是一个很令我头痛的问题,之前因为对各种类型的工具包使用不熟练,以及时间问题,一直没有根治这个人声检测体验不好的问题,之前的解…

不同品牌或型号的单片机

以下是一些常见的单片机品牌和型号&#xff1a; 微控制器&#xff08;Microchip&#xff09;&#xff1a;PIC系列&#xff08;如PIC16F877A、PIC18F4550&#xff09; 瑞萨电子&#xff08;Renesas&#xff09;&#xff1a;RX系列&#xff08;如RX231、RX65N&#xff09;需要资…

Termius 最好用的SSH 连接工具

Termius 最好用的SSH 连接工具 一、环境准备二、配置2.1 terminus 安装2.2 删除自动更新2.3 修改用户信息 三、使用四、页面展示 该工具 mac os 可直接使用 本文只展示 windows 使用步骤&#xff0c;本教程使用的 termius 版本为 7.59.6 一、环境准备 termius 下载 官网下载地址…

ubuntu上安装docker报错

执行docker命令的时候报错如下&#xff1a; Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 为了解决这个问题&#xff0c;看了一些帖子有的说重启docker.service服务或者看该服务是否已经正常启动&#xff0c;结果网上…

超实用!新手项目经理掏心窝总结的经验

像项目这样复杂的环境中&#xff0c;往往会出现错误判断、沟通不畅、管理不善以及最常见的错误。因此&#xff0c;项目管理需要项目经理有广泛的经验、洞察力和技能&#xff0c;无论是规划、组织还是有效领导团队&#xff0c;以在规定的时间和预算内实现项目目标。在这种情况下…