Share via


PySpark와 pandas DataFrames 간의 변환

Azure Databricks에서 Apache Arrow를 사용하여 Apache Spark DataFrames와 pandas DataFrames 간에 변환하는 방법을 알아봅니다.

Apache Arrow 및 PyArrow

Apache Arrow는 JVM과 Python 프로세스 간에 데이터를 효율적으로 전송하기 위해 Apache Spark에서 사용되는 메모리 내 열 형식 데이터 형식입니다. 이는 pandas 및 NumPy 데이터를 사용하는 Python 개발자에게 유용합니다. 그러나 호환성을 보장하고 가장 많은 이점을 얻으려면 약간의 구성 또는 코드 변경이 필요합니다.

PyArrow는 Apache Arrow에 대한 Python 바인딩이며 Databricks Runtime에 설치됩니다. 각 Databricks 런타임 버전에서 사용할 수 있는 PyArrow 버전에 대한 자세한 내용은 Databricks 런타임 릴리스 정보 버전 및 호환성을 참조 하세요.

지원되는 SQL 형식

모든 Spark SQL 데이터 형식은 MapType, TimestampTypeArrayType 및 중첩된 StructType을 제외한 화살표 기반 변환에서 지원됩니다. StructTypepandas.Series 대신 pandas.DataFrame으로 표시됩니다. BinaryType은 PyArrow 버전 0.10.0 이상에서만 지원됩니다.

PySpark DataFrames를 pandas DataFrames 간 변환

화살표는 PySpark DataFrame을 toPandas()를 사용하여 pandas DataFrame으로 변환할 때와 pandas DataFrame을 createDataFrame(pandas_df)을 사용하여 PySpark DataFrame에서 만들 때 최적화로 사용할 수 있습니다.

이러한 메서드에 화살표를 사용하려면 Spark 구성spark.sql.execution.arrow.pyspark.enabledtrue로 설정합니다. Unity 카탈로그가 사용하도록 설정된 작업 영역의 사용자 격리 클러스터뿐만 이 구성(높은 동시성 클러스터 제외)이 기본적으로 사용하도록 설정됩니다.

또한 Spark 내에서 계산하기 전에 오류가 발생하는 경우 spark.sql.execution.arrow.pyspark.enabled로 활성화된 최적화는 화살표가 아닌 구현으로 대체될 수 있습니다. 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()

화살표 최적화를 사용하면 화살표가 활성화되지 않은 경우와 동일한 결과가 생성됩니다. 화살표를 사용하더라도 toPandas()는 DataFrame의 모든 레코드를 드라이버 프로그램에 수집하므로 데이터의 작은 하위 집합에서 수행해야 합니다.

또한 모든 Spark 데이터 형식이 지원되지 않으며 열에 지원되지 않는 형식이 있는 경우 오류가 발생할 수 있습니다. createDataFrame() 중 오류가 발생하는 경우 Spark는 화살표 없이 DataFrame을 만듭니다.