- Convert between PySpark and pandas DataFrames
- Apache Arrow and PyArrow
- Supported SQL types
- Convert PySpark DataFrames to and from pandas DataFrames
- Example
- Преобразование между кадрами данных PySpark и pandas
- Apache Arrow и PyArrow
- Поддерживаемые типы SQL
- Преобразование кадров данных PySpark в кадры данных Pandas и из нее
- Примере
- Convert between PySpark and pandas DataFrames
- Apache Arrow and PyArrow
- Supported SQL types
- Convert PySpark DataFrames to and from pandas DataFrames
- Example
- Feedback
Convert between PySpark and pandas DataFrames
Learn how to convert Apache Spark DataFrames to and from pandas DataFrames using Apache Arrow in Databricks.
Apache Arrow and PyArrow
Apache Arrow is an in-memory columnar data format used in Apache Spark to efficiently transfer data between JVM and Python processes. This is beneficial to Python developers who work with pandas and NumPy data. However, its usage requires some minor configuration or code changes to ensure compatibility and gain the most benefit.
PyArrow is a Python binding for Apache Arrow and is installed in Databricks Runtime. For information on the version of PyArrow available in each Databricks Runtime version, see the Databricks runtime release notes .
Supported SQL types
All Spark SQL data types are supported by Arrow-based conversion except MapType , ArrayType of TimestampType , and nested StructType . StructType is represented as a pandas.DataFrame instead of pandas.Series . BinaryType is supported only for PyArrow versions 0.10.0 and above.
Convert PySpark DataFrames to and from pandas DataFrames
Arrow is available as an optimization when converting a PySpark DataFrame to a pandas DataFrame with toPandas() and when creating a PySpark DataFrame from a pandas DataFrame with createDataFrame(pandas_df) .
To use Arrow for these methods, set the Spark configuration spark.sql.execution.arrow.pyspark.enabled to true . This configuration is enabled by default except for High Concurrency clusters as well as user isolation clusters in workspaces that are Unity Catalog enabled.
In addition, optimizations enabled by spark.sql.execution.arrow.pyspark.enabled could fall back to a non-Arrow implementation if an error occurs before the computation within Spark. You can control this behavior using the Spark configuration spark.sql.execution.arrow.pyspark.fallback.enabled .
Example
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()
Using the Arrow optimizations produces the same results as when Arrow is not enabled. Even with Arrow, toPandas() results in the collection of all records in the DataFrame to the driver program and should be done on a small subset of the data.
In addition, not all Spark data types are supported and an error can be raised if a column has an unsupported type. If an error occurs during createDataFrame() , Spark creates the DataFrame without Arrow.
© Databricks 2023. All rights reserved. Apache, Apache Spark, Spark, and the Spark logo are trademarks of the Apache Software Foundation.
Преобразование между кадрами данных PySpark и pandas
Узнайте, как преобразовать кадры данных Apache Spark в кадры данных Pandas и из нее с помощью Apache Arrow в Azure Databricks.
Apache Arrow и PyArrow
Apache Arrow — это формат столбцов в памяти, используемый в Apache Spark для эффективной передачи данных между JVM и процессами Python. Это полезно для разработчиков Python, которые работают с данными Pandas и NumPy. Однако его использование требует внесения незначительных изменений в конфигурацию или код, чтобы обеспечить совместимость и получить максимальную выгоду.
PyArrow — это привязка Python для Apache Arrow, установленная в Databricks Runtime. Сведения о версии PyArrow, доступной в каждой версии Databricks Runtime, см. в заметках о выпуске Databricks Runtime.
Поддерживаемые типы SQL
Все типы данных Spark SQL поддерживаются преобразованием на основе стрелок, за исключением MapType , ArrayType и TimestampType вложенных StructType . StructType представляется как , pandas.DataFrame а не pandas.Series . BinaryType поддерживается только для PyArrow версий 0.10.0 и более поздних.
Преобразование кадров данных PySpark в кадры данных Pandas и из нее
Стрелка доступна в качестве оптимизации при преобразовании кадра данных PySpark в кадр данных Pandas с помощью toPandas() и при создании кадра данных PySpark из кадра данных Pandas с createDataFrame(pandas_df) помощью .
Чтобы использовать стрелку для этих методов, задайте для конфигурации spark.sql.execution.arrow.pyspark.enabled Spark значение true . Эта конфигурация включена по умолчанию, за исключением кластеров с высоким уровнем параллелизма, а также кластеров изоляции пользователей в рабочих областях с включенным каталогом Unity.
Кроме того, оптимизация, включенная , spark.sql.execution.arrow.pyspark.enabled может вернуться к реализации, отличной от arrow, если произошла ошибка перед вычислением в Spark. Управлять этим поведением можно с помощью конфигурации spark.sql.execution.arrow.pyspark.fallback.enabled Spark .
Примере
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 toPandas() выполняет сбор всех записей в кадре данных в программу драйвера и должен выполняться для небольшого подмножества данных.
Кроме того, поддерживаются не все типы данных Spark, и если столбец имеет неподдерживаемый тип, может возникнуть ошибка. Если во время createDataFrame() возникает ошибка , Spark создает кадр данных без стрелки.
Convert between PySpark and pandas DataFrames
Learn how to convert Apache Spark DataFrames to and from pandas DataFrames using Apache Arrow in Azure Databricks.
Apache Arrow and PyArrow
Apache Arrow is an in-memory columnar data format used in Apache Spark to efficiently transfer data between JVM and Python processes. This is beneficial to Python developers who work with pandas and NumPy data. However, its usage requires some minor configuration or code changes to ensure compatibility and gain the most benefit.
PyArrow is a Python binding for Apache Arrow and is installed in Databricks Runtime. For information on the version of PyArrow available in each Databricks Runtime version, see the Databricks runtime release notes.
Supported SQL types
All Spark SQL data types are supported by Arrow-based conversion except MapType , ArrayType of TimestampType , and nested StructType . StructType is represented as a pandas.DataFrame instead of pandas.Series . BinaryType is supported only for PyArrow versions 0.10.0 and above.
Convert PySpark DataFrames to and from pandas DataFrames
Arrow is available as an optimization when converting a PySpark DataFrame to a pandas DataFrame with toPandas() and when creating a PySpark DataFrame from a pandas DataFrame with createDataFrame(pandas_df) .
To use Arrow for these methods, set the Spark configuration spark.sql.execution.arrow.pyspark.enabled to true . This configuration is enabled by default except for High Concurrency clusters as well as user isolation clusters in workspaces that are Unity Catalog enabled.
In addition, optimizations enabled by spark.sql.execution.arrow.pyspark.enabled could fall back to a non-Arrow implementation if an error occurs before the computation within Spark. You can control this behavior using the Spark configuration spark.sql.execution.arrow.pyspark.fallback.enabled .
Example
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()
Using the Arrow optimizations produces the same results as when Arrow is not enabled. Even with Arrow, toPandas() results in the collection of all records in the DataFrame to the driver program and should be done on a small subset of the data.
In addition, not all Spark data types are supported and an error can be raised if a column has an unsupported type. If an error occurs during createDataFrame() , Spark creates the DataFrame without Arrow.
Feedback
Submit and view feedback for