Databricks:从pandas创建spark数据框架时的问题
我有一个pandas数据帧,我想把它转换为spark数据帧。通常情况下,我使用下面的代码从pandas中创建spark数据帧,但是突然间我开始得到下面的错误,我知道pandas已经删除了iteritems(),但是我目前的pandas版本是2.0.0,我也尝试安装了较低的版本,并尝试创建spark df,但是我仍然得到同样的错误。这个错误是在spark函数里面调用的。我应该安装哪个版本的pandas来创建spark df。我还试着改变集群数据库的运行时间,并试着重新运行,但我还是得到同样的错误。
import pandas as pd
spark.createDataFrame(pd.DataFrame({'i':[1,2,3],'j':[1,2,3]}))
error:-
UserWarning: createDataFrame attempted Arrow optimization because 'spark.sql.execution.arrow.pyspark.enabled' is set to true; however, failed by the reason below:
'DataFrame' object has no attribute 'iteritems'
Attempting non-optimization as 'spark.sql.execution.arrow.pyspark.fallback.enabled' is set to true.
warn(msg)
AttributeError: 'DataFrame' object has no attribute 'iteritems'
这与使用的Databricks Runtime(DBR)版本有关--DBR 12.2之前的Spark版本依赖 .iteritems
函数从Pandas DataFrame构建Spark DataFrame。这个问题在作为DBR 13.x的Spark 3.4中得到了修复。
如果你不能升级到DBR 13.x,那么你需要在你的笔记本中使用%pip install -U pandas==1.5.3
命令,将Pandas降级到最新的1.x版本(现在是1.5.3)。尽管使用DBR附带的Pandas版本更好--它与DBR中其他软件包的兼容性经过了测试。
由于缺少'iteritems'属性,Arrow优化失败了。 你应该尝试在Spark会话中禁用Arrow优化,并在没有Arrow优化的情况下创建DataFrame。
以下是它的工作方式:
import pandas as pd
from pyspark.sql import SparkSession
# Create a Spark session
spark = SparkSession.builder \
.appName("Pandas to Spark DataFrame") \
.getOrCreate()
# Disable Arrow optimization
spark.conf.set("spark.sql.execution.arrow.pyspark.enabled", "false")
# Create a pandas DataFrame
pdf = pd.DataFrame({'i': [1, 2, 3], 'j': [1, 2, 3]})
# Convert pandas DataFrame to Spark DataFrame
sdf = spark.createDataFrame(pdf)
# Show the Spark DataFrame
sdf.show()
它应该可以工作,但如果你想的话,你也可以为Arrow的优化降级你的pandas版本,这样pip install pandas==1.2.5
这个问题的出现是由于Pandas的版本<=2.0。在Pandas 2.0中,.iteritems函数被移除。
这个问题有两个解决方案。
- 下调pandas的版本 < 2.例如,、
pip install -U pandas==1.5.3
- 使用最新的Spark版本,即3.4版本。