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

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 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的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
1月前
|
分布式计算 大数据 Apache
ClickHouse与大数据生态集成:Spark & Flink 实战
【10月更文挑战第26天】在当今这个数据爆炸的时代,能够高效地处理和分析海量数据成为了企业和组织提升竞争力的关键。作为一款高性能的列式数据库系统,ClickHouse 在大数据分析领域展现出了卓越的能力。然而,为了充分利用ClickHouse的优势,将其与现有的大数据处理框架(如Apache Spark和Apache Flink)进行集成变得尤为重要。本文将从我个人的角度出发,探讨如何通过这些技术的结合,实现对大规模数据的实时处理和分析。
144 2
ClickHouse与大数据生态集成:Spark & Flink 实战
|
1月前
|
SQL 算法 大数据
为什么大数据平台会回归SQL
在大数据领域,尽管非结构化数据占据了大数据平台80%以上的存储空间,结构化数据分析依然是核心任务。SQL因其广泛的应用基础和易于上手的特点成为大数据处理的主要语言,各大厂商纷纷支持SQL以提高市场竞争力。然而,SQL在处理复杂计算时表现出的性能和开发效率低下问题日益凸显,如难以充分利用现代硬件能力、复杂SQL优化困难等。为了解决这些问题,出现了像SPL这样的开源计算引擎,它通过提供更高效的开发体验和计算性能,以及对多种数据源的支持,为大数据处理带来了新的解决方案。
|
1月前
|
SQL 存储 算法
比 SQL 快出数量级的大数据计算技术
SQL 是大数据计算中最常用的工具,但在实际应用中,SQL 经常跑得很慢,浪费大量硬件资源。例如,某银行的反洗钱计算在 11 节点的 Vertica 集群上跑了 1.5 小时,而用 SPL 重写后,单机只需 26 秒。类似地,电商漏斗运算和时空碰撞任务在使用 SPL 后,性能也大幅提升。这是因为 SQL 无法写出低复杂度的算法,而 SPL 提供了更强大的数据类型和基础运算,能够实现高效计算。
|
1月前
|
SQL 机器学习/深度学习 分布式计算
Spark快速上手:揭秘大数据处理的高效秘密,让你轻松应对海量数据
【10月更文挑战第25天】本文全面介绍了大数据处理框架 Spark,涵盖其基本概念、安装配置、编程模型及实际应用。Spark 是一个高效的分布式计算平台,支持批处理、实时流处理、SQL 查询和机器学习等任务。通过详细的技术综述和示例代码,帮助读者快速掌握 Spark 的核心技能。
95 6
|
1月前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第27天】在大数据时代,数据湖技术凭借其灵活性和成本效益成为企业存储和分析大规模异构数据的首选。Hadoop和Spark作为数据湖技术的核心组件,通过HDFS存储数据和Spark进行高效计算,实现了数据处理的优化。本文探讨了Hadoop与Spark的最佳实践,包括数据存储、处理、安全和可视化等方面,展示了它们在实际应用中的协同效应。
121 2
|
1月前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第26天】本文详细探讨了Hadoop与Spark在大数据处理中的协同作用,通过具体案例展示了两者的最佳实践。Hadoop的HDFS和MapReduce负责数据存储和预处理,确保高可靠性和容错性;Spark则凭借其高性能和丰富的API,进行深度分析和机器学习,实现高效的批处理和实时处理。
88 1
|
1月前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
1月前
|
分布式计算 大数据 OLAP
AnalyticDB与大数据生态集成:Spark & Flink
【10月更文挑战第25天】在大数据时代,实时数据处理和分析变得越来越重要。AnalyticDB(ADB)是阿里云推出的一款完全托管的实时数据仓库服务,支持PB级数据的实时分析。为了充分发挥AnalyticDB的潜力,将其与大数据处理工具如Apache Spark和Apache Flink集成是非常必要的。本文将从我个人的角度出发,分享如何将AnalyticDB与Spark和Flink集成,构建端到端的大数据处理流水线,实现数据的实时分析和处理。
72 1
|
2月前
|
SQL 分布式计算 Serverless
EMR Serverless Spark:一站式全托管湖仓分析利器
本文根据2024云栖大会阿里云 EMR 团队负责人李钰(绝顶) 演讲实录整理而成
186 2
|
2月前
|
分布式计算 大数据 Apache
利用.NET进行大数据处理:Apache Spark与.NET for Apache Spark
【10月更文挑战第15天】随着大数据成为企业决策和技术创新的关键驱动力,Apache Spark作为高效的大数据处理引擎,广受青睐。然而,.NET开发者面临使用Spark的门槛。本文介绍.NET for Apache Spark,展示如何通过C#和F#等.NET语言,结合Spark的强大功能进行大数据处理,简化开发流程并提升效率。示例代码演示了读取CSV文件及统计分析的基本操作,突显了.NET for Apache Spark的易用性和强大功能。
65 1