Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Naučte se převádět datové rámce Apache Sparku do datových rámců pandas a z datových rámců pandas pomocí Apache Arrow v Azure Databricks.
Apache Arrow a PyArrow
Apache Arrow je sloupcový formát dat v paměti používaný v Apache Sparku k efektivnímu přenosu dat mezi procesy JVM a Pythonu. To je užitečné pro vývojáře v Pythonu, kteří pracují s daty pandas a NumPy. Jeho použití ale vyžaduje některé menší změny konfigurace nebo kódu, aby se zajistila kompatibilita a získala největší výhodu.
PyArrow je vazba Pythonu pro Apache Arrow a je nainstalovaná v Databricks Runtime. Informace o verzi PyArrow dostupné v jednotlivých verzích databricks Runtime najdete v poznámkách k verzi a kompatibilitě modulu Databricks Runtime.
Podporované typy SQL
Všechny datové typy Spark SQL jsou podporovány převodem na základě šipky s výjimkou ArrayTypeTimestampType.
MapType a ArrayType vnořené StructType jsou podporovány pouze při použití PyArrow 2.0.0 a vyšší.
StructType je reprezentován jako pandas.DataFrame místo pandas.Series.
Převod datových rámců PySpark na a z datových rámců pandas
Arrow je k dispozici jako optimalizace při převodu PySpark DataFrame na pandas DataFrame s použitím toPandas() a při vytváření PySpark DataFrame z pandas DataFrame pomocí createDataFrame(pandas_df).
Pokud chcete pro tyto metody použít Arrow, nastavte konfiguraci Sparkuspark.sql.execution.arrow.pyspark.enabled na true. Tato konfigurace je ve výchozím nastavení povolená s výjimkou clusterů s vysokou souběžností a také clusterů izolace uživatelů v pracovních prostorech s povoleným katalogem Unity.
Kromě toho by optimalizace umožněné pomocí spark.sql.execution.arrow.pyspark.enabled mohly přejít na ne-Arrow implementaci, pokud dojde k chybě před výpočtem v rámci Sparku. Toto chování můžete řídit pomocí konfigurace spark.sql.execution.arrow.pyspark.fallback.enabledSparku .
Příklad
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()
Použití optimalizace šipky vytvoří stejné výsledky jako v případech, kdy není šipka povolená. I když je to šipka, toPandas() výsledkem je shromažďování všech záznamů v datovém rámci do programu ovladače a mělo by být provedeno na malé podmnožině dat.
Kromě toho se nepodporují všechny datové typy Sparku a pokud sloupec obsahuje nepodporovaný typ, může se vyvolat chyba. Pokud dojde k chybě během createDataFrame(), Spark vytvoří datový rámec bez šipky.