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 형식
를 제외한 ArrayType
모든 Spark SQL 데이터 형식은 화살표 기반 변환에서 TimestampType
지원됩니다. MapType
중첩 및 ArrayType
중첩 StructType
은 PyArrow 2.0.0 이상을 사용하는 경우에만 지원됩니다. StructType
은 pandas.Series
대신 pandas.DataFrame
으로 표시됩니다.
PySpark DataFrames를 pandas DataFrames 간 변환
화살표는 PySpark DataFrame을 toPandas()
를 사용하여 pandas DataFrame으로 변환할 때와 pandas DataFrame을 createDataFrame(pandas_df)
을 사용하여 PySpark DataFrame에서 만들 때 최적화로 사용할 수 있습니다.
이러한 메서드에 화살표를 사용하려면 Spark 구성 spark.sql.execution.arrow.pyspark.enabled
true
을 .로 설정합니다. 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을 만듭니다.