当前位置: 首页 > 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、显示数据帧内容
在这里插入图片描述

http://www.lryc.cn/news/91856.html

相关文章:

  • 事件相关功能磁共振波谱技术(fMRS)
  • 跨境电商客户服务五步法
  • hadoop环境配置及HDFS配置
  • HTML中 meta的基本应用
  • docker compose 下 Redis 主备配置
  • Tomcat ServletConfig和ServletContext接口概述
  • linux内核open文件流程
  • 遗传算法讲解
  • PostgreSQL修炼之道之高可用性方案设计(十六)
  • Bybit面经
  • GORM---创建
  • 高级查询 — 分组汇总
  • 【多线程】阻塞队列
  • python2升级python3
  • Apache Hudi初探(八)(与spark的结合)--非bulk_insert模式
  • Java之旅(九)
  • 6年测试经验之谈,为什么要做自动化测试?
  • 二分法的边界条件 2517. 礼盒的最大甜蜜度
  • java设计模式(十六)命令模式
  • [运维] iptables限制指定ip访问指定端口和只允许指定ip访问指定端口
  • JS学习笔记(3. 流程控制)
  • 遥感云大数据在灾害、水体与湿地领域典型案例及GPT模型教程
  • 什么是文件描述符以及重定向的本质和软硬链接(Linux)
  • LVM逻辑卷元数据丢失恢复案例 —— 筑梦之路
  • Java技术规范概览
  • 【OpenMMLab AI实战营第二期】二十分钟入门OpenMMLab笔记
  • docker-compose单机容器集群编排
  • CentOS7 安装Gitlab
  • Mysql InnoDB的Buffer Pool
  • SMTP简单邮件传输协议(C/C++ 发送电子邮件)