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

Tüm Spark SQL veri türleri, ArrayTypeTimestampTypeve iç içe StructTypeyerleştirilmiş dışındaki MapTypeOk tabanlı dönüştürme tarafından desteklenir. StructType yerine olarak pandas.DataFramepandas.Seriestemsil edilir. BinaryType yalnızca PyArrow 0.10.0 ve üzeri sürümlerde desteklenir.

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 için 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. 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.