在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的转换MapTypeArrayTypeTimestampType,和嵌套StructTypeStructType表示为熊猫。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”“真正的”#生成一个熊猫数据框架pdfpdDataFramenp随机兰德One hundred.3.))使用Arrow从pandas数据帧创建Spark数据帧df火花createDataFramepdf使用Arrow将Spark DataFrame转换回pandas DataFrameresult_pdfdf选择“*”toPandas()

使用Arrow优化会产生与未启用Arrow时相同的结果。即使有绿箭侠,toPandas ()结果收集了DataFrame中的所有记录到驱动程序中,并且应该在数据的一个小子集上完成。

此外,并不是所有Spark数据类型都受到支持,如果列的类型不受支持,则会引发错误。期间发生错误createDataFrame ()Spark在没有Arrow的情况下创建DataFrame。