如何將 Pandas DataFrame 轉換為 PySpark DataFrame?
Pandas 和 PySpark 是 Python 中兩種流行的資料處理工具。Pandas 非常適合處理單機上的小型到中型資料集,而 PySpark 則設計用於跨多臺機器對大型資料集進行分散式處理。
當您需要擴充套件資料處理以處理更大的資料集時,可能需要將 Pandas DataFrame 轉換為 PySpark DataFrame。在本指南中,我們將探討使用 Python 中的 PySpark 庫將 Pandas DataFrame 轉換為 PySpark DataFrame 的過程。
我們將介紹安裝和設定 PySpark、將 Pandas DataFrame 轉換為 PySpark DataFrame 以及您可以在 PySpark DataFrame 上執行的一些常見操作。
使用 `createDataFrame()` 方法建立 PySpark DataFrame 的語法如下所示:
spark.createDataFrame(data, schema)
其中,`data` 是建立 DataFrame 的值列表,`schema` 或者是資料集的結構,或者是一個列名列表。`spark` 引數指的是 PySpark 中的 SparkSession 物件。
使用 `spark.createDataFrame()` 方法
以下示例程式碼演示瞭如何建立一個 Pandas DataFrame,然後使用 `spark.createDataFrame()` 方法將其轉換為 PySpark DataFrame。
考慮以下程式碼。在這段程式碼中,我們首先建立一個名為 `df_pandas` 的示例 Pandas DataFrame。然後,我們使用 `SparkSession.builder` 方法建立一個 SparkSession 物件,這使我們可以使用 PySpark。
接下來,我們使用 `spark` 物件提供的 `createDataFrame()` 方法將 Pandas DataFrame 轉換為 PySpark DataFrame。`createDataFrame()` 方法將 Pandas DataFrame 作為輸入,並返回一個新的 PySpark DataFrame 物件。
最後,我們使用 `show()` 方法將 PySpark DataFrame 的內容顯示到控制檯。
import pandas as pd from pyspark.sql import SparkSession # Create a sample pandas DataFrame data = {'Name': ['John', 'Jane', 'Bob'], 'Age': [30, 25, 40], 'Salary': [50000.0, 60000.0, 70000.0]} df_pandas = pd.DataFrame(data) # Create a SparkSession object spark = SparkSession.builder.appName('PandasToSparkDF').getOrCreate() # Convert pandas DataFrame to PySpark DataFrame df_spark = spark.createDataFrame(df_pandas) # Show the PySpark DataFrame df_spark.show()
在執行上述程式碼之前,請確保您的系統已安裝 Pandas 和 PySpark 庫。
輸出
執行後,將產生以下輸出:
+----+---+-------+ |Name|Age| Salary| +----+---+-------+ |John| 30|50000.0| |Jane| 25|60000.0| | Bob| 40|70000.0| +----+---+-------+
使用 ArrowSpark
以下更新的程式碼演示瞭如何使用 Apache Arrow 來提高將 Pandas DataFrame 轉換為 PySpark DataFrame 的效能。
考慮以下程式碼。在這段程式碼中,我們首先建立一個名為 `df_pandas` 的示例 Pandas DataFrame。然後,我們使用 PyArrow 庫使用 `Table.from_pandas()` 方法將 Pandas DataFrame 轉換為 PyArrow Table。
接下來,我們使用 `pq.write_table()` 方法以 Parquet 格式將 PyArrow Table 寫入磁碟。這將在當前目錄中建立一個名為 `data.parquet` 的檔案。
最後,我們使用 `spark.read.parquet()` 方法將 Parquet 檔案讀取到名為 `df_spark` 的 PySpark DataFrame 中。然後,我們可以使用 `show()` 方法將 PySpark DataFrame 的內容顯示到控制檯。
使用 Apache Arrow 和 Parquet 格式在 Pandas 和 PySpark 之間轉換資料可以透過減少資料序列化開銷和實現高效的列式儲存來提高效能。
import pandas as pd from pyspark.sql import SparkSession import pyarrow as pa import pyarrow.parquet as pq # Create a sample pandas DataFrame data = {'Name': ['John', 'Jane', 'Bob'], 'Age': [30, 25, 40], 'Salary': [50000.0, 60000.0, 70000.0]} df_pandas = pd.DataFrame(data) # Convert pandas DataFrame to PyArrow Table table = pa.Table.from_pandas(df_pandas) # Write the PyArrow Table to Parquet format pq.write_table(table, 'data.parquet') # Create a SparkSession object spark = SparkSession.builder.appName('PandasToSparkDF').getOrCreate() # Read the Parquet file into a PySpark DataFrame df_spark = spark.read.parquet('data.parquet') # Show the PySpark DataFrame df_spark.show()
要執行上述程式碼,我們首先需要在我們的機器上安裝 **pyarrow** 庫,為此,我們可以使用以下命令:
pip3 install pyarrow
輸出
執行後,將產生以下輸出:
+-----+---+ | Name|Age| +-----+---+ |John | 30| |Jane | 25| | Bob| 40| +-----+---+
結論
總之,可以使用 PyArrow 將 Pandas DataFrame 轉換為 PyArrow Table 並將其以 Parquet 格式寫入磁碟來將 Pandas DataFrame 轉換為 PySpark DataFrame。然後,可以將生成的 Parquet 檔案讀取到 PySpark DataFrame 中。
PySpark 提供了一個強大的分散式計算框架,可以處理大規模資料處理,使其成為大資料分析的理想選擇。透過使用上述方法將 Pandas DataFrame 轉換為 PySpark DataFrame,使用者可以同時利用 PySpark 的強大功能和使用 Pandas DataFrame 的便利性。