Spark DataFrame 和 Pandas DataFrame 的區別


Spark DataFrame

Spark DataFrame 是一個分散式資料集,組織成命名列。它是 Apache Spark 中一個關鍵的資料結構,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 建立 Spark DataFrame 和使用 pandas 建立 Pandas DataFrame 的差異。

演算法

  • 匯入必要的庫

  • 建立 SparkSession:使用 SparkSession.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 資料幀。

  • 聚合 Spark DataFrame 中的資料

    • Sdf.groupby("job") 透過“job”列組織 DataFrame

    • count() 用於計算每個工作的出現次數。

  • 聚合 Pandas DataFrame 中的資料

    • Pdf.groupby("job") 透過“job”列分離 DataFrame

    • size() 計算每個工作的出現次數

    • reset_index(name="count") 重置索引並將聚合列重新命名為“count”

  • 列印聚合的 Pandas 和 spark 資料幀。

示例

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
計算環境 用於大資料處理的分散式計算框架,多個節點。 用於較小資料集的單節點環境。
效能和可擴充套件性 高度可擴充套件且適用於大資料。 對於小型到中型資料集具有出色的效能。
資料處理模型 延遲計算和最佳化的執行計劃。 用於互動式資料探索的即時計算。
語言支援 支援 Scala、Java、Python 和 R。 主要為 Python 構建,並與 Python 生態系統廣泛整合。
索引 不提供帶索引的輸出 提供從 0 開始的預設索引號
資料操作 具有廣泛的轉換和操作。 提供豐富的資料操作和分析功能。
生態系統和整合 與 Apache Spark 生態系統無縫整合。 與 Python 庫(例如 NumPy、Matplotlib)很好地整合。
資料分割槽 支援在分割槽級別進行分割槽和並行處理。 沒有內建的分割槽功能。
記憶體使用 針對分散式處理進行了最佳化的記憶體管理。 依賴於單節點環境中的可用記憶體。

結論

Spark 和 Pandas DataFrame 都是用於處理結構化資料的強大工具,但它們之間存在一些關鍵差異。如果我們在單臺機器上處理小型到中型資料集,Pandas DataFrames 提供了一種方便且高效的解決方案。如果要處理大規模資料處理或在分散式計算環境中工作,則 Spark DataFrames 更適合,因為它們具有可擴充套件性和容錯性。

更新於:2023年8月10日

743 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告