当前位置: 首页 > 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…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...

麒麟系统使用-进行.NET开发

文章目录 前言一、搭建dotnet环境1.获取相关资源2.配置dotnet 二、使用dotnet三、其他说明总结 前言 麒麟系统的内核是基于linux的&#xff0c;如果需要进行.NET开发&#xff0c;则需要安装特定的应用。由于NET Framework 是仅适用于 Windows 版本的 .NET&#xff0c;所以要进…...

CTF show 数学不及格

拿到题目先查一下壳&#xff0c;看一下信息 发现是一个ELF文件&#xff0c;64位的 ​ 用IDA Pro 64 打开这个文件 ​ 然后点击F5进行伪代码转换 可以看到有五个if判断&#xff0c;第一个argc ! 5这个判断并没有起太大作用&#xff0c;主要是下面四个if判断 ​ 根据题目…...

SQL进阶之旅 Day 22:批处理与游标优化

【SQL进阶之旅 Day 22】批处理与游标优化 文章简述&#xff08;300字左右&#xff09; 在数据库开发中&#xff0c;面对大量数据的处理任务时&#xff0c;单条SQL语句往往无法满足性能需求。本篇文章聚焦“批处理与游标优化”&#xff0c;深入探讨如何通过批量操作和游标技术提…...