Aracılığıyla paylaş


PySpark ile pandas DataFrame'ler arasında dönüştürme

Azure Databricks'te Apache Arrow kullanarak Apache Spark DataFrames'i pandas DataFrames'e ve pandas DataFrame'lerden nasıl dönüştüreceğinizi öğrenin.

Apache Arrow ve PyArrow

Apache Arrow , JVM ile Python işlemleri arasında verileri verimli bir şekilde aktarmak için Apache Spark'ta kullanılan bellek içi sütunlu bir veri biçimidir. Bu, pandas ve NumPy verileriyle çalışan Python geliştiricileri için yararlıdır. Ancak kullanımı, uyumluluğu sağlamak ve en yüksek avantajı elde etmek için bazı küçük yapılandırma veya kod değişiklikleri gerektirir.

PyArrow, Apache Arrow için bir Python bağlaması olup Databricks Runtime'a yüklenir. Her Databricks Runtime sürümünde kullanılabilen PyArrow sürümü hakkında bilgi için bkz . Databricks Runtime sürüm notları sürümleri ve uyumluluğu.

Desteklenen SQL türleri

ArrayType TimestampType dışındaki tüm Spark SQL veri türleri Ok tabanlı dönüştürme tarafından desteklenir. MapType ve ArrayType iç içe yerleştirilmiş StructType yalnızca PyArrow 2.0.0 ve üzeri kullanılırken desteklenir. StructType, pandas.DataFrame yerine pandas.Series olarak temsil edilir.

PySpark DataFrame'leri pandas DataFrame'lere ve pandas DataFrame'lerden dönüştürme

Arrow, PySpark DataFrame'i toPandas() pandas DataFrame'e dönüştürürken ve pandas DataFrame'den createDataFrame(pandas_df) PySpark DataFrame oluştururken bir iyileştirme olarak kullanılabilir.

Bu yöntemler için Ok kullanmak amacıyla, Spark yapılandırmasını spark.sql.execution.arrow.pyspark.enabled olarak trueayarlayın. Bu yapılandırma, Unity Kataloğu etkinleştirilmiş çalışma alanlarındaki yüksek eşzamanlılık kümeleri ve kullanıcı yalıtım kümeleri dışında varsayılan olarak etkindir.

Ayrıca, tarafından spark.sql.execution.arrow.pyspark.enabled etkinleştirilen iyileştirmeler Spark'taki hesaplamadan önce bir hata oluşursa Ok olmayan bir uygulamaya geri dönebilir. Spark yapılandırmasını spark.sql.execution.arrow.pyspark.fallback.enabledkullanarak bu davranışı denetleyebilirsiniz.

Örnek

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()

Ok iyileştirmelerinin kullanılması, Ok etkin olmadığında eldeki sonuçlarla aynı sonuçları verir. Arrow kullanılsa bile, toPandas() DataFrame'deki tüm kayıtların sürücü programına toplanmasına neden olur ve bu işlem verilerin küçük bir alt kümesi üzerinde yapılmalıdır.

Ayrıca, tüm Spark veri türleri desteklenmez ve bir sütun desteklenmeyen bir türe sahipse hata oluşabilir. sırasında createDataFrame()bir hata oluşursa Spark, DataFrame'i Ok olmadan oluşturur.