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 操作类函数
函数 | 描述 | 版本 |
---|---|---|
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 操作类函数
函数 | 描述 | 版本 |
---|---|---|
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 版本支持 |
两者都可的操作函数
函数 | 描述 | 版本 |
---|---|---|
cache() | 将 DataFrame 的数据持久化到内存,Transformation 或 Action 操作,具体取决于它的使用方式。 | 从 1.3 版本支持 |