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 Ok 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
Dışındaki ArrayType
TimestampType
tüm Spark SQL veri türleri Ok tabanlı dönüştürme tarafından desteklenir.
MapType
ve ArrayType
iç içe yerleştirilmişler StructType
yalnızca PyArrow 2.0.0 ve üzerini kullanırken desteklenir.
StructType
yerine olarak pandas.DataFrame
pandas.Series
temsil edilir.
PySpark DataFrame'leri pandas DataFrame'lere ve pandas DataFrame'lerden dönüştürme
Ile ve ile toPandas()
bir pandas DataFrame'den PySpark DataFrame oluştururken PySpark DataFrame'i pandas DataFrame'e createDataFrame(pandas_df)
dönüştürürken iyileştirme olarak ok kullanılabilir.
Bu yöntemler için Ok kullanmak amacıyla, Spark yapılandırmasını spark.sql.execution.arrow.pyspark.enabled
olarak true
ayarlayı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.enabled
kullanarak 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. Ok ile bile, toPandas()
DataFrame'deki tüm kayıtların sürücü programına toplanmasına neden olur ve verilerin küçük bir alt kümesinde 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.