Spark 教程

Spark SQL

Spark 笔记

Spark MLlib

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/spark-dataframe.html

Spark DataFrame 原理及操作详解


Spark DataFrame 是 2015 年 3 月 13 日发布的 Spark 1.3.0 版本中新引入的,也是该版本最大的亮点,从属于 Spark SQL 模块。DataFrame 主要用于进行结构化数据的处理,它提供的一种基于 RDD 之上的全新概念,但是它的底层其实还是基于 RDD 的。

创建 DataFrame

DataFrame 的数据来源可以多种多样,可以通过手写数据,也可以从 csv、json 等文件加载,还可以从 mysql、hive 等存储数据表导入数据。

手写数据初始化 DataFrame

通过 createDataFrame 函数加载数据,示例如下:

from pyspark.sql import SparkSession

spark_session = SparkSession.builder.appName('knowledgedict-dataframe').getOrCreate()

df = spark_session.createDataFrame(
    schema=['impression', 'click', 'ctr'],
    data=[(100, 5, 0.05), (10, 3, 0.3)]
)
print(df)
df.show()

函数列表

DataFrame 操作可以分为两种类型:Transformation 操作 和 Action 操作。

Transformation 操作:即转换操作,实际上是在构建一个执行计划(DAG,Directed Acyclic Graph),而不会对原始 DataFrame 进行实际修改。

Action 操作:实际动作操作,对 DataFrame 执行实际的计算或操作,通常会触发计算并返回结果,这些操作会导致 Spark 集群上的任务执行,因此它们通常会引起计算开销。

Transformation 操作类函数

Transformation 操作类函数列表
函数 描述 版本
agg() 对分组后的数据进行聚合计算,如求和、平均值等。 从 1.3 版本支持
coalesce() 减少分区数,合并分区。 从 1.4 版本支持
createTempView() 创建临时表或视图。 从 2.0 版本支持
distinct() 去除重复的行。 从 1.3 版本支持
drop() 删除指定的列。 从 1.4 版本支持
filter() 根据指定的条件进行过滤。 从 1.3 版本支持
fillna() 填充 null 值,可指定列,也可以全量替换,比较灵活。 从 1.3.1 版本支持
groupBy() 按指定列进行分组。 从 1.3 版本支持
join() 连接两个 DataFrame。 从 1.3 版本支持
limit() 限制返回的行数。 从 1.3 版本支持
registerTempTable() 将 DataFrame 注册为一个 SQL 临时表,以供 SQL 查询使用。 从 1.3 版本支持
repartition() 重新分区 DataFrame,并进行指定分区个数。 从 1.3 版本支持
rollup() 执行多级数据透视操作。 从 1.4 版本支持
select() 选择 DataFrame 中的指定列。 从 1.3 版本支持
sample() 从 DataFrame 中抽样数据。 从 1.3 版本支持
toDF() 用于为DataFrame的列指定名称。
toJSON() 将数据转换成 JSON 格式。 从 1.3 版本支持
union() 合并两个 DataFrame。 从 2.0 版本支持
where() filter 函数的别名,等同 filter。 从 1.3 版本支持
withColumn() 添加一个新列或替换现有列。 从 1.3 版本支持

Action 操作类函数

Action 操作类函数列表
函数 描述 版本
collect() 在驱动节点收集全部数据并在本地可进行后续操作处理。 从 1.3 版本支持
count() 返回 DataFrame 中的行数。 从 1.3 版本支持
explain() 显示 DataFrame 的物理执行计划。 从 1.3 版本支持
first() 返回 DataFrame 的第一行数据。 从 1.3 版本支持
foreach() 对 DataFrame 中的每一行执行指定的操作。 从 1.3 版本支持
foreachPartition() 对 DataFrame 的每个分区执行指定的操作。 从 1.3 版本支持
printSchema() 用于在控制台或日志中打印 DataFrame 的模式信息。 从 1.3 版本支持
show() 显示 DataFrame 中的数据。 从 1.3 版本支持
take() 返回 DataFrame 的前几行数据。 从 1.3 版本支持
toPandas() 将 DataFrame 转换为 Pandas DataFrame。 从 1.3 版本支持

两者都可的操作函数

可看作 Transformation 或 Action 操作类函数列表
函数 描述 版本
cache() 将 DataFrame 的数据持久化到内存,Transformation 或 Action 操作,具体取决于它的使用方式。 从 1.3 版本支持
spark dataframe 的 fillna 函数等同于 na.fill(),na.fill 函数底层也是调用 fillna,它的作用是 ...
Elasticsearch(简称为ES)是一个分布式、高性能的开源搜索和分析引擎,用于存储、检索和分析大量数据。动态映射:当索引新文档时,E ...
Pandas 的 DataFrame 是由多种类型的列构成的二维标签数据结构。可以把它想象成一个 Excel 表格或 SQL 表,或者 Se ...
Spark 是由 Scala 编写的,所以在安装 Spark 的过程中,首先必须确保 Java 环境的安装和 Scala 的安装。 ...
Apache Spark 是一个开源集群运算框架,最初是由加州大学伯克利分校 AMP 实验室所开发。相对于 Hadoop 的 MapRedu ...