Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Scopri come convertire i DataFrame di Apache Spark in e da DataFrame pandas utilizzando Apache Arrow in Azure Databricks.
Apache Arrow e PyArrow
Apache Arrow è un formato di dati a colonne in memoria usato in Apache Spark per trasferire in modo efficiente i dati tra processi JVM e Python. Questo è utile per gli sviluppatori Python che lavorano con i dati pandas e NumPy. Tuttavia, l'utilizzo richiede alcune piccole modifiche di configurazione o codice per garantire la compatibilità e ottenere il massimo vantaggio.
PyArrow è un'associazione Python per Apache Arrow ed è installata in Databricks Runtime. Per informazioni sulla versione di PyArrow disponibile in ogni versione di Databricks Runtime, vedere le note di rilascio sulle versioni di Databricks Runtime e la loro compatibilità.
Tipi SQL supportati
Tutti i tipi di dati Spark SQL sono supportati dalla conversione basata su freccia ad eccezione ArrayType di TimestampType.
MapType e ArrayType di StructType annidati sono supportati solo quando si usa PyArrow 2.0.0 e versioni successive.
StructType è rappresentato come invece pandas.DataFrame di pandas.Series.
Convertire i DataFrame PySpark in e da DataFrame pandas
La freccia è disponibile come ottimizzazione quando si converte un dataframe PySpark in un dataframe pandas con toPandas() e quando si crea un dataframe PySpark da un dataframe pandas con createDataFrame(pandas_df).
Per usare Arrow per questi metodi, impostare la configurazione di Sparkspark.sql.execution.arrow.pyspark.enabled su true. Questa configurazione è abilitata per impostazione predefinita, ad eccezione dei cluster a concorrenza elevata e dei cluster di isolamento utente nelle aree di lavoro abilitate per Unity Catalog.
Inoltre, le ottimizzazioni abilitate da spark.sql.execution.arrow.pyspark.enabled potrebbero ritornare a un'implementazione non Arrow se si verifica un errore prima del calcolo all'interno di Spark. È possibile controllare questo comportamento usando la configurazione spark.sql.execution.arrow.pyspark.fallback.enableddi Spark .
Esempio
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()
L'uso delle ottimizzazioni freccia produce gli stessi risultati di quando Arrow non è abilitato. Anche con Arrow, toPandas() la raccolta di tutti i record nel DataFrame viene eseguita nel programma driver e deve essere eseguita su un piccolo subset dei dati.
Inoltre, non tutti i tipi di dati Spark sono supportati e può essere generato un errore se una colonna ha un tipo non supportato. Se si verifica un errore durante createDataFrame(), Spark crea il dataframe senza freccia.