我有一个 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()
它应该可以工作,但如果你愿意,你也可以降级你的 pandas 版本以进行 Arrow 优化
pip install pandas==1.2.5