当前位置: 首页 > news >正文

4.2 Spark SQL数据源 - 基本操作

一、默认数据源

案例演示读取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.0http://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、显示数据帧内容
在这里插入图片描述

相关文章:

4.2 Spark SQL数据源 - 基本操作

一、默认数据源 案例演示读取Parquet文件 查看Spark的样例数据文件users.parquet 1、在Spark Shell中演示 启动Spark Shell 查看数据帧内容 查看数据帧模式 对数据帧指定列进行查询&#xff0c;查询结果依然是数据帧&#xff0c;然后通过write成员的save()方法写入HDF…...

事件相关功能磁共振波谱技术(fMRS)

导读 质子磁共振波谱(MRS)是一种非侵入性脑成像技术&#xff0c;用于测量不同神经化学物质的浓度。“单体素”MRS数据通常在几分钟内采集&#xff0c;然后对单个瞬态进行平均&#xff0c;从而测量神经化学物质浓度。然而&#xff0c;这种方法对更快速的神经化学物质的时间动态…...

跨境电商客户服务五步法

互联网技术的革新与升级对商务客服产生了巨大的影响&#xff0c;过去由在线客服与客户直接电联的单一服务形式被全渠道客服系统所替代。在电子商务时代&#xff0c;商家与客户之间的互动变得尤为重要&#xff1a;一方面&#xff0c;卖家通过分析客户喜好及消费趋向来针对性处理…...

hadoop环境配置及HDFS配置

环境与配置 ubuntu 20.04.6 /centos8hadoop 3.3.5 指令有部分不一样但是,配置是相同的 安装步骤 创建一个虚拟机,克隆三个虚拟机,master内存改大一点4G,salve内存1Gj修改主机名和配置静态ip(管理员模式下)) hostnamectl set-hostname node1 # 修改主机名 sudo passwd root …...

HTML中 meta的基本应用

meta 标签的定义 meta 标签是 head 部分的一个辅助性标签&#xff0c;提供关于 HTML 文档的元数据。它并不会显示在页面上&#xff0c;但对于机器是可读的。可用于浏览器&#xff08;如何显示内容或重新加载页面&#xff09;&#xff0c;搜索引擎&#xff08;SEO&#xff09;或…...

docker compose 下 Redis 主备配置

1、准备两台虚拟机或者物理机 node1 IP&#xff1a;192.168.123.78 node2 IP&#xff1a;192.168.123.82 2、安装docker和docker compose 3、安装node1&#xff0c;配置docker-compose.yml version: 3services:redis-rs1:container_name: redis_node1image: redis:5.0.3rest…...

Tomcat ServletConfig和ServletContext接口概述

ServletConfig是一个接口&#xff0c;是Servlet规范中的一员 WEB服务器实现了ServletConfig接口&#xff0c;这里指的是Tomcat服务器 一个Servlet对象中有一个ServletConfig对象&#xff0c;Servlet和ServletConfig对象是一对一 ServletConfig对象是Tomcat服务器创建的&#xf…...

linux内核open文件流程

打开文件流程 本文基本Linux5.15 当应用层通过open api打开一个文件&#xff0c;内核中究竟如何处理&#xff1f; 本身用来描述内核中对应open 系统调用的处理流程。 数据结构 fdtable 一个进程可以打开很多文件&#xff0c; 内核用fdtable来管理这些文件。 include/linu…...

遗传算法讲解

遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09; 是模拟生物在自然环境中的遗传和进化的过程而形成的自适应全局优化搜索算法。它借用了生物遗传学的观点&#xff0c;通过自然选择、遗传和变异等作用机制&#xff0c;实现各个个体适应性的提高。 基因型 (G…...

PostgreSQL修炼之道之高可用性方案设计(十六)

20 高可用性方案设计&#xff08;一&#xff09; 在一个生产系统中&#xff0c;通常都需要用高可用方案来保证系统的不间断运行。本章将详细介绍如何实现PostgreSQL数据库的高可用方案。 20.1 高可用架构基础 通常数据库的高可用方案都是让多个数据库服务器协同工作&#xff0…...

Bybit面经

缘起 V2EX有广告内推&#xff0c;看描述还挺不错 贴主5 年半工作经验&#xff0c;有两年大厂工作经历&#xff0c;20 年 11 月来到新加坡分公司开始工作 后来是猎头Jeff找的我 0318 主面 主要一个面试官是后端开发金融背景 某条金融线的负责人&#xff1b;其余是交叉面试。面…...

GORM---创建

目录 模型定义使用Create创建记录一次性创建多条数据批量插入数据时开启事务默认值问题 模型定义 定义一个PersonInfo结构体。 type PersonInfo struct {Id uint64 gorm:"column:id;primary_key;NOT NULL" json:"id"UserName string gorm:"co…...

高级查询 — 分组汇总

关于分组汇总 1.概述 将查询结果按某一列或者多列的值分组。 group by子句 分组后聚合函数将作用于每一个组&#xff0c;即每一组都有一个函数值。 语法 select 字段列表 from 表名 where 筛选条件 group by 分组的字段;select 字段列表 from 表名 group by 分组的字段 hav…...

【多线程】阻塞队列

1. 认识阻塞队列和消息队列 阻塞队列也是一个队列&#xff0c;也是一个特殊的队列&#xff0c;也遵守先进先出的原则&#xff0c;但是带有特殊的功能。 如果阻塞队列为空&#xff0c;执行出队列操作&#xff0c;就会阻塞等待&#xff0c;阻塞到另一个线程往阻塞队列中添加元素(…...

python2升级python3

查看当前版本 [roottest-01 node-v18.16.0]# python -V Python 2.7.5 安装依赖 [roottest-01 node-v18.16.0]# yum install -y gcc gcc-c zlib zlib-devel readline-devel 已加载插件&#xff1a;fastestmirror, langpacks Loading mirror speeds from cached hostfile * base…...

Apache Hudi初探(八)(与spark的结合)--非bulk_insert模式

背景 之前讨论的都是’hoodie.datasource.write.operation’:bulk_insert’的前提下&#xff0c;在这种模式下&#xff0c;是没有json文件的已形成如下的文件&#xff1a; /dt1/.hoodie_partition_metadata /dt1/2ffe3579-6ddb-4c5f-bf03-5c1b5dfce0a0-0_0-41263-0_202305282…...

Java之旅(九)

Java 循环语句 Java 中的循环语句包括 for、while 和 do-while&#xff0c;它们都可以用于实现循环结构。 for 语句用于循环执行一段代码块&#xff0c;直到给定的条件表达式的布尔值为 false。 for 语句的一般格式如下&#xff1a; for (initialization; condition; update…...

6年测试经验之谈,为什么要做自动化测试?

一、自动化测试 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。 个人认为&#xff0c;只要能服务于测试工作&#xff0c;能够帮助我们提升工作效率的&#xff0c;不管是所谓的自动化工具&#xff0c;还是简单的SQL 脚本、批处理脚本&#xff0c;还是自己编写…...

二分法的边界条件 2517. 礼盒的最大甜蜜度

2517. 礼盒的最大甜蜜度 给你一个正整数数组 price &#xff0c;其中 price[i] 表示第 i 类糖果的价格&#xff0c;另给你一个正整数 k 。 商店组合 k 类 不同 糖果打包成礼盒出售。礼盒的 甜蜜度 是礼盒中任意两种糖果 价格 绝对差的最小值。 返回礼盒的 最大 甜蜜度。 记录一…...

java设计模式(十六)命令模式

目录 定义模式结构角色职责代码实现适用场景优缺点 定义 命令模式&#xff08;Command Pattern&#xff09; 又叫动作模式或事务模式。指的是将一个请求封装成一个对象&#xff0c;使发出请求的责任和执行请求的责任分割开&#xff0c;然后可以使用不同的请求把客户端参数化&a…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...