Megosztás a következőn keresztül:


Konvertálás a PySpark és a pandas DataFrames között

Megtudhatja, hogyan konvertálhatja az Apache Spark DataFrame-eket pandas DataFrame-ekre az Apache Arrow használatával az Azure Databricksben.

Apache Arrow és PyArrow

Az Apache Arrow egy memórián belüli oszlopos adatformátum, amelyet az Apache Spark használ a JVM és a Python-folyamatok közötti adattovábbításhoz. Ez előnyös a Pandas és a NumPy-adatokkal dolgozó Python-fejlesztők számára. A használathoz azonban kisebb konfiguráció- vagy kódmódosítások szükségesek a kompatibilitás biztosításához és a legnagyobb haszonhoz.

A PyArrow egy Python-kötés az Apache Arrowhoz, és a Databricks Runtime-ban van telepítve. Az egyes Databricks Runtime-verziókban elérhető PyArrow verziójával kapcsolatos információkért tekintse meg a Databricks Runtime kibocsátási megjegyzéseinek verzióit és kompatibilitását.

Támogatott SQL-típusok

Az összes Spark SQL-adattípust támogatja a nyílalapú átalakítás, kivéve ArrayType a TimestampType. MapType és ArrayType a beágyazott StructType elemek csak a PyArrow 2.0.0-s és újabb verzióiban támogatottak. StructTypea helyett pandas.Seriesa pandas.DataFrame .

PySpark DataFrame-ek konvertálása pandas DataFrame-ekre és -ről

A Arrow optimalizálásként érhető el, ha PySpark DataFrame-et pandas DataFrame-gé toPandas() konvertál, és amikor PySpark DataFrame-et hoz létre egy pandas DataFrame-ből createDataFrame(pandas_df).

Ha a Nyíl parancsot szeretné használni ezekhez a metódusokhoz, állítsa a Spark-konfigurációt spark.sql.execution.arrow.pyspark.enabled a következőretrue: . Ez a konfiguráció alapértelmezés szerint engedélyezve van, kivéve a magas egyidejűségi fürtöket, valamint a Unity Catalog által engedélyezett munkaterületeken lévő felhasználóelkülönítési fürtöket.

Emellett az általuk engedélyezett spark.sql.execution.arrow.pyspark.enabled optimalizálás visszaeshet egy nem nyíl implementációra, ha hiba történik a Sparkban végzett számítás előtt. Ezt a viselkedést a Spark-konfigurációval spark.sql.execution.arrow.pyspark.fallback.enabledszabályozhatja.

Példa

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()

A nyíloptimalizálások ugyanazokat az eredményeket eredményezik, mint amikor a Nyíl nincs engedélyezve. A DataFrame-ben lévő összes rekordot a Nyíllal toPandas() is az illesztőprogram-programba gyűjti, és az adatok egy kis részhalmazán kell elvégezni.

Emellett nem minden Spark-adattípus támogatott, és hiba is felmerülhet, ha egy oszlop nem támogatott típussal rendelkezik. Ha hiba történik a folyamat során createDataFrame(), a Spark a DataFrame-et nyíl nélkül hozza létre.