Spark Dataframe与Pandas Dataframe的区别

Spark Dataframe与Pandas Dataframe的区别

Spark Dataframe

Spark Dataframe是一个分布式的数据集合,通过命名列来建立。它是Apache Spark中的一个关键统计结构,它是针对大数据处理进行了优化的快速分布式计算设备。在分布式计算的上下文中,Spark Dataframe提供了一个更高级别的API,用于处理结构化和半结构化数据。

Pandas Dataframe

Pandas Dataframe是一种表示表格数据的二维标记数据结构。它是Python中Pandas库提供的核心数据结构之一。DataFrame以行列的格式组织数据,类似于表格或电子表格。

优势

Spark DataFrames Pandas DataFrames
可以处理超出单个设备内存潜力的庞大数据集,并利用Spark的计算能力。 用户友好的API与直观的语法,使得对结构化数据进行管理和检查变得流畅。
优化信息处理,减少数据洗牌,并优化执行计划。 具有丰富的库环境,提供有效的统计学处理工具、可视化工具和机器学习工具。
通过将工作负载重新分配到集群中的其他节点,自动从故障中恢复。 支持多种数据格式,允许与本地数据源无缝集成。
支持多种数据源,可以与其他数据格式无缝集成。 可以完全在内存中运行,实现快速高效的数据处理。
在机器集群中进行并行处理,非常适合大数据处理任务。 提供了丰富的功能和操作,用于数据处理、探索和分析。

缺点

Spark DataFrames Pandas DataFrames
需要分布式计算环境和集群配置,相对于像Pandas DataFrames这样的单机解决方案更复杂。 由于单台计算机的内存容量限制,对于处理大型数据集来说效率较低。
由于计算的分布性质,会产生额外的开销,这可能会引入额外的延迟,从而使其对于中小型数据集的效率大大降低。 缺乏内置的分布式计算功能,因此与Spark DataFrames相比,对于大规模数据集的运行效率较低。

示例1

我们将展示使用PySpark和Pandas分别开发Spark DataFrame和Pandas DataFrame的变化。

步骤

  • 导入必要的库

  • 创建SparkSession:使用SparkSession.builder构建一个builder对象。

  • 通过开发一个字典列表来定义数据。

  • 使用createDataFrame(data)构建一个Spark DataFrame。

  • 使用pd.DataFrame(data)创建一个Pandas DataFrame。

  • 显示每个单独的DataFrame。

示例

from pyspark.sql import SparkSession
import pandas as pd
# Creating a SparkSession
spark = SparkSession.builder.appName("SparkDataFrameExample").getOrCreate()

# Creating the DataFrames from a list of dictionaries
data = [{"name": "Ashwin", "age": 25}, {"name": "Pooja", "age": 30}, {"name": 
"John", "age": 28}]
Sdf = spark.createDataFrame(data)
Pdf = pd.DataFrame(data)

# Displaying the Spark DataFrame
print("Structure of Spark DataFrame")
Sdf.show()
# Displaying the Pandas DataFrame
print("Structure of Pandas DataFrame")
print(Pdf)

输出

Structure of Spark DataFrame
+------+---+
|  name|age|
+------+---+
|Ashwin| 25|
| Pooja| 30|
|  John| 28|
+------+---+

Structure of Pandas DataFrame
 name  age
0  Ashwin   25   #displays along with the index number
1   Pooja   30
2   John   28

Spark DataFrame以表格形式显示,而Pandas DataFrame会打印为从0开始自动索引的表格

我们还可以看到,Pandas DataFrame中的输出显示了相应的索引号。

示例2

我们将创建一个包含职位数据的Spark DataFrame和Pandas DataFrame,然后在两个DataFrame中执行聚合操作,以找出语法上的差异,并找出每个职位的数量。

步骤

  • 通过导入pyspark和pandas来开始。

  • 初始化一个SparkSession:

  • 使用包含字典列表的数据来概述数据,并使用该记录创建pandas和spark dateframes。

  • 在Spark DataFrame中聚合数据:

    • Sdf.groupby(“job”)通过”job”列对DataFrame进行排列

    • 使用count()来计算每个职位的出现次数。

  • 在Pandas DataFrame中聚合数据:

    • Pdf.groupby(“job”)通过”job”列将DataFrame分开

    • 使用size()来统计每个职位的出现次数

    • 使用reset_index(name=”count”)来重置索引并将聚合列重命名为”count”

  • 打印聚合后的Pandas和spark DataFrame。

示例

from pyspark.sql import SparkSession
import pandas as pd

# Creating a SparkSession
spark = SparkSession.builder.appName("SparkDataFrameExample").getOrCreate()

# Creating a Spark DataFrame from a list of dictionaries representing jobs
data = [{"job": "Engineer"}, {"job": "Analyst"}, {"job": "Analyst"}, {"job": 
"Manager"}, {"job": "Engineer"}]
Sdf = spark.createDataFrame(data)

# Creating a Pandas DataFrame representing jobs
Pdf = pd.DataFrame(data)

# Aggregating data in Spark DataFrame
grouped_df_spark = Sdf.groupby("job").count()

# Aggregating data in Pandas DataFrame
grouped_df_pandas = Pdf.groupby("job").size().reset_index(name="count")

# Displaying the aggregated Pandas DataFrame
print(grouped_df_pandas)

# Displaying the aggregated Spark DataFrame
grouped_df_spark.show()

输出

job  count
0   Analyst   2
1   Engineer   2
2   Manager   1

+--------+-----+
|   job|count|
+--------+-----+
| Analyst|   2|
|Engineer|   2|
| Manager|   1|
+--------+-----+

比较Spark DataFrame和Pandas DataFrame的表格

功能 Spark DataFrame Pandas DataFrame
计算环境 大数据处理的分布式计算框架,多个节点。 适用于较小数据集的单节点环境。
性能和可伸缩性 非常适合处理大数据的可伸缩和高效性。 对于中小规模的数据集具有出色的性能。
数据处理模型 延迟计算和优化的执行计划。 用于交互式数据探索的即时计算。
语言支持 支持ScalaJava、Python和R。 主要为Python构建,并与Python生态系统深度集成。
索引 不提供带索引的输出 提供从0开始的默认索引号
数据操作 具有广泛的转换和操作功能。 具有丰富的数据操作和分析功能。
生态系统和集成 与Apache Spark生态系统无缝集成。 与Python库(例如NumPy、Matplotlib)良好集成。
数据分区 支持按分区级别分区和并行处理。 不具备内置的分区功能。
内存使用 为分布式处理进行了优化的内存管理。 依赖于单节点环境中可用的内存。

结论

Spark和Pandas Dataframe都是处理结构化数据的强大工具,但它们之间有一些关键的区别。如果我们处理的是在单个机器上的小型到中型数据集,Pandas DataFrames提供了一种方便高效的解决方案。如果你处理的是大规模数据处理或者在分布式计算环境中工作,Spark DataFrames更适合,因为它们具有扩展性和容错性。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程