在PySpark和pandas数据框架之间转换
学习如何在Databricks中使用Apache Arrow将Apache Spark dataframe转换为pandas dataframe。
Apache Arrow和PyArrow
Apache箭头是Apache Spark中用于在JVM和Python进程之间高效传输数据的内存柱状数据格式。这对于使用pandas和NumPy数据的Python开发人员是有益的。但是,它的使用需要进行一些小的配置或代码更改,以确保兼容性并获得最大的好处。
PyArrow是Apache Arrow的Python绑定,安装在Databricks Runtime中。有关每个Databricks Runtime版本中可用的PyArrow版本的信息,请参阅Databricks运行时发布说明.
支持的SQL类型
所有Spark SQL数据类型都支持基于arrow的转换MapType
,ArrayType
的TimestampType
,和嵌套StructType
.StructType
表示为熊猫。DataFrame
而不是熊猫。系列
.BinaryType
仅支持PyArrow 0.10.0及以上版本。
将PySpark dataframe转换为pandas dataframe
Arrow可以作为将PySpark DataFrame转换为pandas DataFrame的优化toPandas ()
当用pandas DataFrame创建PySpark DataFrame时createDataFrame (pandas_df)
.
要为这些方法使用Arrow,请设置火花配置spark.sql.execution.arrow.pyspark.enabled
来真正的
.默认情况下,除了启用了Unity Catalog的工作空间中的高并发集群和用户隔离集群,该配置是启用的。
此外,通过spark.sql.execution.arrow.pyspark.enabled
如果在Spark内的计算之前发生错误,可以退回到非arrow实现。您可以使用Spark配置来控制这种行为spark.sql.execution.arrow.pyspark.fallback.enabled
.
例子
进口numpy作为np进口熊猫作为pd#启用基于箭头的柱状数据传输火花.相依.集(“spark.sql.execution.arrow.pyspark.enabled”,“真正的”)#生成一个熊猫数据框架pdf=pd.DataFrame(np.随机.兰德(One hundred.,3.))使用Arrow从pandas数据帧创建Spark数据帧df=火花.createDataFrame(pdf)使用Arrow将Spark DataFrame转换回pandas DataFrameresult_pdf=df.选择(“*”).toPandas()
使用Arrow优化会产生与未启用Arrow时相同的结果。即使有绿箭侠,toPandas ()
结果收集了DataFrame中的所有记录到驱动程序中,并且应该在数据的一个小子集上完成。
此外,并不是所有Spark数据类型都受到支持,如果列的类型不受支持,则会引发错误。期间发生错误createDataFrame ()
Spark在没有Arrow的情况下创建DataFrame。