图解大数据 | 基于Dataframe / SQL大数据处理分析@Spark操作

简介: DataFrame是一个以命名列方式组织的分布式数据集。本文详细讲解 Spark Dataframe的创建方式,Dataframe数据的Agg、Collect、Groupby、Join等核心操作,以及Spark SQL操作核心要点。

ShowMeAI研究中心

作者:韩信子@ShowMeAI
教程地址http://www.showmeai.tech/tutorials/84
本文地址http://www.showmeai.tech/article-detail/175
声明:版权所有,转载请联系平台与作者并注明出处

收藏ShowMeAI查看更多精彩内容


1.Spark Dataframe 简介

在高版本的Spark中,我们可以使用Dataframe这个结构形态更方便快捷地对数据进行处理,而且它也和我们熟悉的python pandas Dataframe的很多操作可以类比关联。

DataFrame是一个以命名列方式组织的分布式数据集。在概念上,它跟关系型数据库中的一张表或者1个Python(或者R)中的data frame一样,但是进行了一些优化。

DataFrame可以根据结构化的数据文件、hive表、外部数据库或者已经存在的RDD构造。

Spark操作; 基于Dataframe与SQL的大数据处理分析; Spark DataFrame; 支持的数据源; 9-1

根据官方文档的解释,我们可以发现 Spark DataFrame 有以下几个核心点:

Spark操作; 基于Dataframe与SQL的大数据处理分析; Spark DataFrame; 官方文档; 9-2

  • 分布式的数据集
  • 与关系型数据库中的table、excel 里的一张 sheet、python/R 里的 DataFrame等类似
  • 拥有丰富的操作函数,类似于 RDD 中的算子
  • 一个 DataFrame 可以被注册成一张数据表,然后用 SQL 语言在上面操作
  • 丰富的创建方式:结构化数据文件、Hive表、外部数据库、已有的RDD

1)DataFrame的优势

DataFrame API 是在 R 和 Python Pandas Dataframe 灵感之上设计的,具有以下功能特性:

  • 从KB到PB级的数据量支持
  • 多种数据格式和多种存储系统支持
  • 通过Spark SQL 的 Catalyst 优化器进行先进的优化,生成代码
  • 通过Spark无缝集成所有大数据工具与基础设施
  • 为Python、Java、Scala和R语言(SparkR)API

Spark操作; 基于Dataframe与SQL的大数据处理分析; Spark DataFrame; DataFrame的优势; 9-3

简单来说,DataFrame 能够更方便的操作数据集,而且因为其底层是通过 Spark SQL 的 Catalyst优化器生成优化后的执行代码,所以其执行速度会更快。

2)Spark生态及DataFrame所处位置

Spark操作; 基于Dataframe与SQL的大数据处理分析; Spark DataFrame; DataFrame的位置; 9-4

Spark操作; 基于Dataframe与SQL的大数据处理分析; Spark DataFrame; DataFrame的位置; 9-5

2.DataFrame 创建方式

1)创建DataFrame的数据源

Spark SQL,DataFrame,datasets 共用 Spark SQL 库,三者共享同样的代码优化、生成以及执行流程,所以 SQL,DataFrame,datasets 的入口都是 SQLContext。

Spark操作; 基于Dataframe与SQL的大数据处理分析; 创建DataFrame; 创建DataFrame的数据源; 9-6

2)创建DataFrame的步骤

以python代码(pyspark)为例,我们在创建spark Dataframe之前,需要先初试化Sparksession。

Spark操作; 基于Dataframe与SQL的大数据处理分析; 创建DataFrame; 创建 SparkSession; 9-7

基于sparksession对象我们可以通过read函数对不同类型的文本形态数据进行加载(比如下图演示的是json格式)

Spark操作; 基于Dataframe与SQL的大数据处理分析; 创建DataFrame; 从json文件创建DataFrame; 9-8

当然,我们也可以通过RDD初始化spark Dataframe,参考代码如下图所示:

Spark操作; 基于Dataframe与SQL的大数据处理分析; 创建DataFrame; 从RDD创建DataFrame; 9-9

我们也可以直接从csv文件加载数据,如下图参考代码所示:

Spark操作; 基于Dataframe与SQL的大数据处理分析; 创建DataFrame; 从csv文件创建DataFrame; 9-10

构建完成的spark Dataframe可以通过printSchema查看Dataframe的结构形态,如下参考代码所示:

Spark操作; 基于Dataframe与SQL的大数据处理分析; 创建DataFrame; 通过schema查看DataFrame结构; 9-11

3.DataFrame数据核心操作

DataFrame的操作API汇总如下图所示:

Spark操作; 基于Dataframe与SQL的大数据处理分析; DataFrame API; DataFrame API操作; 9-12

1)Agg

可以通过agg操作对spark Dataframe的数据进行聚合统计。

Spark操作; 基于Dataframe与SQL的大数据处理分析; DataFrame API; Agg聚合; 9-13

2)Alias

Alias操作主要是对spark Dataframe的字段进行重命名操作。

Spark操作; 基于Dataframe与SQL的大数据处理分析; DataFrame API; Alias重命名; 9-14

3)Cache

cache用于对数据持久化,对应操作下的数据,不会在spark计算过程中反复计算。

Spark操作; 基于Dataframe与SQL的大数据处理分析; DataFrame API; Cache; 9-15

4)Collect

collect操作会把数据直接把数据取回内存,以python列表形态返回。

Spark操作; 基于Dataframe与SQL的大数据处理分析; DataFrame API; Collect; 9-16

5)Columns

可以通过columns操作获取字段名称列表。

Spark操作; 基于Dataframe与SQL的大数据处理分析; DataFrame API; Columns; 9-17

6)Corr

对于数据的统计计算,比如相关性可以通过corr操作完成。

Spark操作; 基于Dataframe与SQL的大数据处理分析; DataFrame API; Corr; 9-18

7)Count

可以通过count操作完成Dataframe数据的计数统计。

Spark操作; 基于Dataframe与SQL的大数据处理分析; DataFrame API; Count; 9-19

8)Describe

我们通过describe函数可以查看Dataframe数据的基本统计信息。

Spark操作; 基于Dataframe与SQL的大数据处理分析; DataFrame API; Describe; 9-20

9)Distinct

如果要对Dataframe数据进行虑重操作,可以使用distinct算子操作。

Spark操作; 基于Dataframe与SQL的大数据处理分析; DataFrame API; Distinct; 9-21

10)Drop

删除数据或者字段都可以通过drop算子完成。

Spark操作; 基于Dataframe与SQL的大数据处理分析; DataFrame API; Drop; 9-22

11)Dropna

dropna可以帮助我们剔除掉数据中的缺失值记录或者字段。

Spark操作; 基于Dataframe与SQL的大数据处理分析; DataFrame API; Dropna; 9-23

12)Fillna

我们可以通过fillna来填充Dataframe缺失值。

Spark操作; 基于Dataframe与SQL的大数据处理分析; DataFrame API; Fillna; 9-24

13)Filter

我们可以通过filter操作对spark Dataframe的数据进行条件过滤。

Spark操作; 基于Dataframe与SQL的大数据处理分析; DataFrame API; Filter; 9-25

14)First

first可以取出spark Dataframe的第1条数据记录并返回。

Spark操作; 基于Dataframe与SQL的大数据处理分析; DataFrame API; First; 9-26

15)FlatMap

Spark Dataframe中的flatmap和RDD中的操作类似,也可以帮助我们把数据变换并平铺返回。

Spark操作; 基于Dataframe与SQL的大数据处理分析; DataFrame API; FlatMap; 9-27

16)Head

可以通过head操作返回前n条数据记录。

Spark操作; 基于Dataframe与SQL的大数据处理分析; DataFrame API; Head; 9-28

17)Groupby

对于Spark Dataframe大数据的分组可以通过groupby完成

Spark操作; 基于Dataframe与SQL的大数据处理分析; DataFrame API; GroupBy; 9-29

Spark操作; 基于Dataframe与SQL的大数据处理分析; DataFrame API; groupBy(col1)9-30

18)Join

我们通过Join操作对Spark Dataframe的不同数据表进行连接聚合。

Spark操作; 基于Dataframe与SQL的大数据处理分析; DataFrame API; Join; 9-31

19)OrderBy

可以通过orderby对spark Dataframe数据进行排序操作。

Spark操作; 基于Dataframe与SQL的大数据处理分析; DataFrame API; OrderBy; 9-32

4.Spark SQL 操作

1)通过SQL对数据进行操作

除了使用DataFrame API数据,还可以注册成table,通过SQL对数据进行操作。

Spark操作; 基于Dataframe与SQL的大数据处理分析; Spark SQL操作; 通过SQL对数据进行操作; 9-33

2)案例详解

Spark操作; 基于Dataframe与SQL的大数据处理分析; Spark SQL操作; 初始化SparkSession; 9-34

Spark操作; 基于Dataframe与SQL的大数据处理分析; Spark SQL操作; 构建数据集与序列化; 9-35

Spark操作; 基于Dataframe与SQL的大数据处理分析; Spark SQL操作; 构建数据集与序列化; 9-36

Spark操作; 基于Dataframe与SQL的大数据处理分析; Spark SQL操作; DataFrame请求方式 VS SQL; 9-37

Spark操作; 基于Dataframe与SQL的大数据处理分析; Spark SQL操作; DataFrame请求方式 VS SQL; 9-38

参考资料

【大数据技术与处理】推荐阅读

ShowMeAI 系列教程推荐

ShowMeAI用知识加速每一次技术成长

相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
目录
相关文章
|
11月前
|
SQL 数据可视化 关系型数据库
MCP与PolarDB集成技术分析:降低SQL门槛与简化数据可视化流程的机制解析
阿里云PolarDB与MCP协议融合,打造“自然语言即分析”的新范式。通过云原生数据库与标准化AI接口协同,实现零代码、分钟级从数据到可视化洞察,打破技术壁垒,提升分析效率99%,推动企业数据能力普惠化。
869 3
|
SQL JSON 分布式计算
Spark SQL架构及高级用法
Spark SQL基于Catalyst优化器与Tungsten引擎,提供高效的数据处理能力。其架构涵盖SQL解析、逻辑计划优化、物理计划生成及分布式执行,支持复杂数据类型、窗口函数与多样化聚合操作,结合自适应查询与代码生成技术,实现高性能大数据分析。
905 2
|
SQL 算法 数据挖掘
【SQL周周练】:利用行车轨迹分析犯罪分子作案地点
【SQL破案系列】第一篇: 如果监控摄像头拍下了很多车辆的行车轨迹,那么如何利用这些行车轨迹来分析车辆运行的特征,是不是能够分析出犯罪分子“踩点”的位置
401 15
|
SQL 关系型数据库 MySQL
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
|
SQL 关系型数据库 MySQL
【MySQL】SQL分析的几种方法
以上就是SQL分析的几种方法。需要注意的是,这些方法并不是孤立的,而是相互关联的。在实际的SQL分析中,我们通常需要结合使用这些方法,才能找出最佳的优化策略。同时,SQL分析也需要对数据库管理系统,数据,业务需求有深入的理解,这需要时间和经验的积累。
494 12
|
SQL 分布式计算 资源调度
Dataphin功能Tips系列(48)-如何根据Hive SQL/Spark SQL的任务优先级指定YARN资源队列
如何根据Hive SQL/Spark SQL的任务优先级指定YARN资源队列
547 4
|
SQL 分布式计算 Java
Spark SQL向量化执行引擎框架Gluten-Velox在AArch64使能和优化
本文摘自 Arm China的工程师顾煜祺关于“在 Arm 平台上使用 Native 算子库加速 Spark”的分享,主要内容包括以下四个部分: 1.技术背景 2.算子库构成 3.算子操作优化 4.未来工作
2310 0
|
SQL JSON 分布式计算
【赵渝强老师】Spark SQL的数据模型:DataFrame
本文介绍了在Spark SQL中创建DataFrame的三种方法。首先,通过定义case class来创建表结构,然后将CSV文件读入RDD并关联Schema生成DataFrame。其次,使用StructType定义表结构,同样将CSV文件读入RDD并转换为Row对象后创建DataFrame。最后,直接加载带有格式的数据文件(如JSON),通过读取文件内容直接创建DataFrame。每种方法都包含详细的代码示例和解释。
525 0
|
人工智能 分布式计算 大数据
大数据≠大样本:基于Spark的特征降维实战(提升10倍训练效率)
本文探讨了大数据场景下降维的核心问题与解决方案,重点分析了“维度灾难”对模型性能的影响及特征冗余的陷阱。通过数学证明与实际案例,揭示高维空间中样本稀疏性问题,并提出基于Spark的分布式降维技术选型与优化策略。文章详细展示了PCA在亿级用户画像中的应用,包括数据准备、核心实现与效果评估,同时深入探讨了协方差矩阵计算与特征值分解的并行优化方法。此外,还介绍了动态维度调整、非线性特征处理及降维与其他AI技术的协同效应,为生产环境提供了最佳实践指南。最终总结出降维的本质与工程实践原则,展望未来发展方向。
721 0
|
存储 分布式计算 Hadoop
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
811 79