Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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 az Arrow-alapú átalakítás, kivéve ArrayType a TimestampType.
MapType és ArrayType a StructType beágyazott elemei csak a PyArrow 2.0.0 és újabb verziókban támogatottak.
StructType úgy van ábrázolva, mint pandas.DataFrame, ahelyett, hogy pandas.Series lenne.
PySpark DataFrame-ek konvertálása pandas DataFrame-ekre és vissza
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ílbillentyűt szeretné használni ezekhez a metódusokhoz, állítsa a Spark konfigurációsspark.sql.execution.arrow.pyspark.enabledtrueértékre. 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.
Továbbá a spark.sql.execution.arrow.pyspark.enabled által engedélyezett optimalizálások visszaeshetnek egy nem Arrow 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. Még az Arrow használatával is az összes rekordot a DataFrame-ból összegyűjti az illesztőprogram részeként futó programba, és ezt csak az adatok egy kis részhalmazán szabad 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.