Konwertowanie między ramkami danych PySpark i pandas
Dowiedz się, jak konwertować ramki danych platformy Apache Spark na i z ramek danych biblioteki pandas przy użyciu narzędzia Apache Arrow w usłudze Azure Databricks.
Apache Arrow i PyArrow
Apache Arrow to format danych kolumnowych w pamięci używany w platformie Apache Spark do wydajnego przesyłania danych między procesami JVM i Python. Jest to korzystne dla deweloperów języka Python, którzy pracują z danymi biblioteki pandas i biblioteki NumPy. Jednak jego użycie wymaga pewnych drobnych zmian konfiguracji lub kodu w celu zapewnienia zgodności i uzyskania największej korzyści.
PyArrow to powiązanie języka Python dla narzędzia Apache Arrow i jest instalowane w środowisku Databricks Runtime. Aby uzyskać informacje na temat wersji PyArrow dostępnej w każdej wersji środowiska Databricks Runtime, zobacz wersje informacji o wersji środowiska Databricks Runtime i ich zgodność.
Obsługiwane typy SQL
Wszystkie typy danych Spark SQL są obsługiwane przez konwersję opartą na strzałkach z wyjątkiem ArrayType
TimestampType
. MapType
wartości i ArrayType
zagnieżdżone StructType
są obsługiwane tylko w przypadku używania biblioteki PyArrow 2.0.0 lub nowszej. StructType
element jest reprezentowany pandas.DataFrame
jako zamiast pandas.Series
.
Konwertowanie ramek danych PySpark na i z ramek danych biblioteki pandas
Strzałka jest dostępna jako optymalizacja podczas konwertowania ramki danych PySpark na ramkę danych toPandas()
biblioteki pandas za pomocą polecenia i podczas tworzenia ramki danych PySpark na podstawie ramki danych biblioteki pandas za pomocą polecenia createDataFrame(pandas_df)
.
Aby użyć strzałki dla tych metod, ustaw konfigurację spark.sql.execution.arrow.pyspark.enabled
platformy Spark na true
wartość . Ta konfiguracja jest domyślnie włączona z wyjątkiem klastrów o wysokiej współbieżności, a także klastrów izolacji użytkowników w obszarach roboczych, które są włączone w wykazie aparatu Unity.
Ponadto optymalizacje włączone przez spark.sql.execution.arrow.pyspark.enabled
program mogą wrócić do implementacji niezwiązanej ze strzałką, jeśli wystąpi błąd przed obliczeniu na platformie Spark. To zachowanie można kontrolować przy użyciu konfiguracji spark.sql.execution.arrow.pyspark.fallback.enabled
platformy Spark.
Przykład
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()
Użycie optymalizacji strzałki powoduje uzyskanie takich samych wyników, jak w przypadku, gdy strzałka nie jest włączona. Nawet w przypadku strzałki toPandas()
wyniki zbierania wszystkich rekordów w ramce danych do programu sterownika i powinny być wykonywane na małym podzestawie danych.
Ponadto nie wszystkie typy danych platformy Spark są obsługiwane i może zostać zgłoszony błąd, jeśli kolumna ma nieobsługiwany typ. Jeśli wystąpi błąd podczas , createDataFrame()
platforma Spark tworzy ramkę danych bez strzałki.