共用方式為


在 PySpark 與 pandas DataFrame 之間轉換

瞭解如何使用 Azure Databricks 中的 Apache 箭頭,將 Apache Spark DataFrame 轉換成 pandas DataFrame 和從 Pandas DataFrame。

Apache Arrow 和 PyArrow

Apache Arrow 是 Apache Spark 中用來有效率地在 JVM 與 Python 進程之間傳輸數據的記憶體記憶體記憶體數據格式。 這對使用 pandas 和 NumPy 數據的 Python 開發人員很有説明。 不過,其使用方式需要一些次要的組態或程式代碼變更,以確保相容性並取得最大效益。

PyArrow 是 Apache Arrow 的 Python 系結,並安裝在 Databricks Runtime 中。 如需每個 Databricks 執行時間版本中可用的 PyArrow 版本資訊,請參閱 Databricks Runtime 版本資訊版本和相容性

支援的 SQL 類型

除了 之外,箭ArrayTypeTimestampType號型轉換支援所有Spark SQL資料類型。 MapType只有在使用 PyArrow 2.0.0.0 和更新版本時,才支援巢狀 StructTypeArrayType 的 。 StructType 表示為 pandas.DataFramepandas.Series而不是 。

將 PySpark DataFrame 轉換成 pandas DataFrame,以及從 Pandas DataFrame 轉換

使用 將 PySpark DataFrame 轉換成 pandas DataFrame 時,以及使用 從 pandas DataFrame 建立 PySpark DataFrame toPandas() createDataFrame(pandas_df)時,箭號可作為優化。

若要針對這些方法使用 Arrow,請將 Spark 組spark.sql.execution.arrow.pyspark.enabled設定設定為 true。 默認會啟用此組態,除了高併行叢集,以及已啟用 Unity 目錄之工作區中的使用者隔離叢集。

此外,如果 Spark 中的計算發生錯誤,所 spark.sql.execution.arrow.pyspark.enabled 啟用的優化可能會回復為非箭頭實作。 您可以使用 Spark 組態 spark.sql.execution.arrow.pyspark.fallback.enabled來控制此行為。

範例

import numpy as np
import pandas as pd

# Enable Arrow-based columnar data transfers
spark.conf.set("spark.sql.execution.arrow.pyspark.enabled", "true")

# Generate a pandas DataFrame
pdf = pd.DataFrame(np.random.rand(100, 3))

# Create a Spark DataFrame from a pandas DataFrame using Arrow
df = spark.createDataFrame(pdf)

# Convert the Spark DataFrame back to a pandas DataFrame using Arrow
result_pdf = df.select("*").toPandas()

使用箭頭優化會產生與未啟用Arrow時相同的結果。 即使使用 Arrow, toPandas() 也會讓 DataFrame 中的所有記錄集合到驅動程式程式,而且應該在一小部分的數據上完成。

此外,並非所有Spark資料類型都受到支援,而且如果數據行有不支援的類型,則可以引發錯誤。 如果在 期間 createDataFrame()發生錯誤,Spark 會建立沒有箭號的數據框架。