Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Saiba como converter DataFrames do Apache Spark de/para DataFrames do Pandas usando o Apache Arrow no Azure Databricks.
Apache Arrow e PyArrow
O Apache Arrow é um formato de dados colunar na memória usado no Apache Spark para transferir dados com eficiência entre os processos JVM e Python. Isso é útil para desenvolvedores do Python que trabalham com dados do Pandas e do NumPy. No entanto, o uso dele requer algumas pequenas alterações de configuração ou código para que seja possível aproveitá-lo ao máximo e garantir a compatibilidade.
O PyArrow é uma associação do Python para Apache Arrow e está instalado no Databricks Runtime. Para obter informações sobre a versão do PyArrow disponível em cada Databricks Runtime, consulte as Notas sobre a versão do Databricks Runtime.
Tipos de SQL com suporte
Todos os tipos de dados do Spark SQL têm suporte para conversão baseada no Arrow, exceto ArrayType de TimestampType.
MapType e ArrayType de StructType aninhados só têm suporte ao usar o PyArrow 2.0.0 e superior.
StructType é representado como um pandas.DataFrame em vez de pandas.Series.
Converter DataFrames do PySpark em e a partir de DataFrames do pandas
O Arrow está disponível como uma otimização ao converter um DataFrame do PySpark em um DataFrame do pandas com toPandas() e ao criar um DataFrame do PySpark com base em um DataFrame do pandas com createDataFrame(pandas_df).
Para usar o Arrow para esses métodos, defina a Configuração do Sparkspark.sql.execution.arrow.pyspark.enabled como true. Essa configuração é habilitada por padrão, exceto para clusters de Alta Simultaneidade, bem como clusters de isolamento do usuário em workspaces habilitados para o Catálogo do Unity.
Além disso, as otimizações habilitadas pelo spark.sql.execution.arrow.pyspark.enabled poderão fazer fall-back para uma implementação que não seja do Arrow se ocorrer um erro antes da computação no Spark. Você pode controlar esse comportamento usando a configuração do Spark spark.sql.execution.arrow.pyspark.fallback.enabled.
Exemplo
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()
O uso das otimizações do Arrow produz os mesmos resultados de quando o Arrow não está habilitado. Mesmo com o Arrow, o toPandas() resulta na coleta de todos os registros no DataFrame para o programa de driver e deve ser feito em um pequeno subconjunto dos dados.
Além disso, nem todos os tipos de dados do Spark têm suporte, e um erro poderá ser gerado se uma coluna tiver um tipo sem suporte. Se ocorrer um erro durante o createDataFrame(), o Spark criará o DataFrame sem o Arrow.