在PySpark和熊貓DataFrames之間進行轉換
學習如何將Apache火花DataFrames與熊貓DataFrames磚使用Apache箭頭。
Apache箭頭和PyArrow
Apache箭頭是一個內存中的柱狀數據格式中使用Apache火花JVM和Python流程之間有效地傳輸數據。這是有利於Python開發人員處理熊貓和NumPy數據。然而,它的使用需要一些小的配置或更改代碼,以確保兼容性和獲得最大的好處。
PyArrow Python綁定在磚安裝Apache箭頭和運行時。信息版PyArrow每個磚中可用的運行時版本,查看磚的運行時版本說明。
支持SQL類型
所有火花SQL數據類型支持Arrow-based轉換除外MapType
,ArrayType
的TimestampType
和嵌套StructType
。StructType
表示為pandas.DataFrame
而不是pandas.Series
。BinaryType
隻支持PyArrow 0.10.0及以上版本。
轉換PySpark DataFrames與熊貓DataFrames
箭頭是可用時,作為一種優化轉換PySpark DataFrame熊貓DataFrame與toPandas ()
當創建一個PySpark DataFrame從熊貓DataFramecreateDataFrame (pandas_df)
。
使用箭頭這些方法,設置火花配置spark.sql.execution.arrow.pyspark.enabled
來真正的
。這個配置是默認啟用除了高並發性集群以及集群用戶隔離在工作區統一目錄啟用。
此外,通過優化spark.sql.execution.arrow.pyspark.enabled
可能會回到non-Arrow實現之前,如果出現錯誤計算在火花。你可以控製這種行為使用火花配置spark.sql.execution.arrow.pyspark.fallback.enabled
。
例子
進口numpy作為np進口熊貓作為pd#啟用Arrow-based柱狀數據傳輸火花。相依。集(“spark.sql.execution.arrow.pyspark.enabled”,“真正的”)#生成一個熊貓DataFramepdf=pd。DataFrame(np。隨機。蘭德(One hundred.,3))#創建一個火花DataFrame從熊貓DataFrame使用箭頭df=火花。createDataFrame(pdf)#火花DataFrame轉換回一個熊貓DataFrame使用箭頭result_pdf=df。選擇(“*”)。toPandas()
使用箭頭優化產生相同的結果當箭頭不啟用。即使有箭頭,toPandas ()
結果的集合中的所有記錄DataFrame驅動程序和應該做的一個小子集的數據。
另外,並非所有火花支持數據類型和一個錯誤可以提高如果一個列有不支持的類型。如果一個錯誤發生在createDataFrame ()
,火花創建DataFrame沒有箭頭。