Spark SQL【博学谷学习记录】
创始人
2024-05-29 02:23:58
0

1. Spark SQL基本概念

1.1 了解什么是Spark SQL

什么是结构化数据:

Spark SQL是Spark多种组件中其中一个, 主要是用于处理大规模的结构化数据

一份数据集, 每一行都是有固定的列, 每一列的类型都是一致的, 我们将这种数据集称为结构化的数据

例如: MySQL表数据

1 张三 20

2 李四 18

3 王五 21

Spark SQL的特点:

1- 融合性: 既可以使用标准SQL语言 也可以使用代码, 同时也支持混合使用

2- 统一的数据访问: 可以通过Spark SQL来对接不同的数据库, 通过统一的API即可操作多个数据库

3- HIVE的兼容性: Spark SQL 可以和 HIVE进行整合, 整合后替换执行引擎为Spark,核心: 基于HIVE的MetaStore, 替换HiveServer2

4- 标准化连接: Spark SQL 也支持 JDBC/ODBC的连接方式

1.2 Spark SQL与Hive异同

相同点:

1- 都是分布式计算的引擎

2= 都可以处理大规模的数据

3- 都可以基于yarn集群运行

不同点:

1- Spark SQL是基于内存计算, 而Hive SQL是基于磁盘来进行计算的

2- Spark SQL没有元数据管理的服务(自己维护),而Hive SQL是有metastore的元数据管理服务项

3- Spark SQL底层执行Spark RDD程序, 而Hive SQL 底层执行MR

4- Spark SQL可以编写SQL 也可以编写代码, 但是Hive SQL仅能编写SQL语句

1.3 Spark SQL的数据结构对比

RDD: 存储直接就是对象, 比如在图中, 存储就是一个Person的对象, 但是里面有什么数据靠内心, 不太清楚

DataFrame: 将Person中各个字段的数据, 进行格式化存储,形成一个dataFrame,可以直接看到数据

dataSet: 将Person对象中数据都按照结构化的方式存储好, 同时保留对象的类型,从而知道来源于一个Person的对象

由于Python不支持泛型,所以无法使用DataSet类型, 客户端仅支持dataFrame类型

2. Spark SQL的入门

2.1 Spark SQL的统一入门

如何构建一个SparkSession对象呢?

from pyspark import SparkContext, SparkConf
from pyspark.sql import SparkSession
import os# 锁定远端环境, 确保环境统一
os.environ['SPARK_HOME'] = '/export/server/spark'
os.environ['PYSPARK_PYTHON'] = '/root/anaconda3/bin/python3'
os.environ['PYSPARK_DRIVER_PYTHON'] = '/root/anaconda3/bin/python3'if __name__ == '__main__':print("演示: 如何创建SparkSession核心对象")# 1. 创建SparkSession对象spark = SparkSession.builder.appName('create_spark_session').master('local[*]').getOrCreate()# 2. 获取SparkContext对象sc = spark.sparkContext# 3. 执行相关的操作: Spark SQL  还是 Spark RDD# 4. 释放资源sc.stop()spark.stop()

2.2 Spark SQL的入门案例

需求: 有如下结构化数据, 要求查询在北京地区的学员有那些?

数据集:

1,张三,男,北京

2,李四,女,上海

3,王五,女,北京

4,赵六,男,广州

5,田七,男,北京

6,周八,女,杭州

from pyspark import SparkContext, SparkConf
from pyspark.sql import SparkSession
import os# 锁定远端环境, 确保环境统一
os.environ['SPARK_HOME'] = '/export/server/spark'
os.environ['PYSPARK_PYTHON'] = '/root/anaconda3/bin/python3'
os.environ['PYSPARK_DRIVER_PYTHON'] = '/root/anaconda3/bin/python3'if __name__ == '__main__':print("Spark SQL的入门案例")# 1. 创建SparkSession对象spark = SparkSession.builder.appName('spark_sql_init').master('local[*]').getOrCreate()# 2.读取外部文件数据"""path: 指定读取数据的路径header: 数据集是否含有头信息,默认为False(如果为true, 会将数据集第一行设置为表头)inferSchema: 是否需要自动识别每一列的数据类型,默认为false sep: 设置字段与字段之间的分隔符号, 默认为 csv为 逗号"""df = spark.read.csv(path='file:///export/data/workspace/ky06_pyspark/_03_SparkSql/data/stu.txt',header=True,inferSchema=True,sep=' ',encoding='UTF-8')#df.printSchema() # 查看字段结构信息#df.show() # 显示数据, 默认显示前20行# 3- 执行相关的操作:# 3.1 使用SQL 的形式df.createTempView('stu')df_res = spark.sql("""select*from stu where address = '北京'""")df_res.show()# 3.2  代码的形式df.where("address = '北京'").show()# 3- 释放资源spark.stop()

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...