Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Узнайте, как с помощью Apache Arrow преобразовать DataFrames Apache Spark в и из DataFrames pandas в Azure Databricks.
Apache Arrow и PyArrow
Apache Arrow — это формат колоночных данных в памяти, используемый в Apache Spark для эффективного обмена данными между процессом виртуальной машины Java и процессом Python. Это полезно для разработчиков Python, работающих с пандами и данными NumPy. Однако его использование требует некоторых незначительных изменений конфигурации или кода, чтобы обеспечить совместимость и получить наибольшее преимущество.
PyArrow — это привязка Python для Apache Arrow и устанавливается в Databricks Runtime. Для получения информации о версии PyArrow, доступной в каждой версии среды выполнения Databricks, см. заметки о версиях и совместимости Databricks Runtime.
Поддерживаемые типы данных SQL
Все типы данных SQL Spark поддерживаются преобразованием со стрелками, за исключением ArrayType
TimestampType
.
MapType
и ArrayType
в структуре вложенных StructType
поддерживаются только при использовании PyArrow версии 2.0.0 и выше.
StructType
представляется как pandas.DataFrame
, а не pandas.Series
.
Преобразование PySpark DataFrames в pandas DataFrames и обратно
Arrow доступна как оптимизация в процессе преобразования PySpark DataFrame в pandas DataFrame с помощью toPandas()
и при создании PySpark DataFrame из pandas DataFrame с помощью createDataFrame(pandas_df)
.
Чтобы использовать Arrow для этих методов, задайте для конфигурации Spark
Кроме того, оптимизация, включённая spark.sql.execution.arrow.pyspark.enabled
, может откатиться к не-Arrow реализации, если ошибка произойдет до вычисления в Spark. Это поведение можно контролировать с помощью конфигурации Spark spark.sql.execution.arrow.pyspark.fallback.enabled
.
Пример
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()
Использование оптимизации Arrow дает те же результаты, как если бы Arrow не включена. Даже с использованием Arrow, toPandas()
приводит к сбору всех записей в DataFrame в программу драйвера и следует использовать только на небольшом подмножестве данных.
Кроме того, не все типы данных Spark поддерживаются и может возникать ошибка, если столбец имеет неподдерживаемый тип. При возникновении ошибки во время createDataFrame()
, Spark создает DataFrame без использования Apache Arrow.