Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Узнайте, как с помощью 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 поддерживаются преобразованием со стрелками, за исключением ArrayTypeTimestampType.
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.