PySpark ve pandas DataFrames arasında dönüştürmeyi iyileştirme

Apache Arrow, verileri JVM ve Python işlemleri arasında verimli bir şekilde Apache Spark için kullanılan bellek içinde sütunlu veri biçimidir. Bu, pandas ve NumPy verileriyle birlikte çalışmakta olan Python geliştiricileri için yararlıdır. Ancak, kullanımı otomatik değildir ve tam olarak yararlanmak ve uyumluluğu sağlamak için yapılandırma veya kodda bazı küçük değişiklikler gerektirir.

PyArrow sürümleri

PyArrow, Databricks Runtime. Her bir sürümde kullanılabilen PyArrow sürümü hakkında bilgi Databricks Runtime databricks runtime sürüm notlarına bakın.

Desteklenen SQL türleri

Tüm Spark SQL veri türleri , ve iç içe geçmiş dışında Ok MapType tabanlı dönüştürme tarafından de ArrayType TimestampType StructType destekler. StructType yerine olarak pandas.DataFrame temsil pandas.Series edildi. BinaryType yalnızca PyArrow 0.10.0'a eşit veya daha yüksek olduğunda değerli.

PySpark DataFrames'i pandas DataFrames'e ve pandas DataFrame'lerinden dönüştürme

Ile bir PySpark DataFrame'i ile pandas DataFrame'e dönüştürürken ve ile toPandas() bir pandas DataFrame'den PySpark DataFrame oluştururken ok iyileştirme olarak createDataFrame(pandas_df) kullanılabilir. Bu yöntemler için Arrow kullanmak üzere Spark yapılandırmasını olarak spark.sql.execution.arrow.enabled true ayarlayın. Bu yapılandırma varsayılan olarak devre dışıdır.

Ayrıca, tarafından etkinleştirilen iyileştirmeler, Spark içindeki hesaplamadan önce bir hata oluşursa Ok olmayan spark.sql.execution.arrow.enabled bir uygulamaya geri dönebilir. Spark yapılandırmasını kullanarak bu davranışı kontrol altına spark.sql.execution.arrow.fallback.enabled aabilirsiniz.

Örnek

import numpy as np
import pandas as pd

# Enable Arrow-based columnar data transfers
spark.conf.set("spark.sql.execution.arrow.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()

Ok iyileştirmelerini kullanmak, Ok etkinleştirilmemişse ile aynı sonuçları üretir. Arrow ile bile DataFrame'de sürücü programına tüm kayıtların toplanmasına neden olur ve verilerin küçük bir alt toPandas() kümesinde yapılması gerekir.

Ayrıca, tüm Spark veri türleri desteklenmez ve bir sütun desteklenmeyen bir türe sahipse hata ortaya çıkar. sırasında bir hata oluşursa createDataFrame() Spark, DataFrame'i Ok olmadan oluşturmak için geri döner.