You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Databricks中从Pandas创建Spark DataFrame遇iteritems属性错误

问题描述

原本使用以下代码将Pandas DataFrame转换为Spark DataFrame:

import pandas as pd
spark.createDataFrame(pd.DataFrame({'i':[1,2,3],'j':[1,2,3]}))

但升级到Pandas 2.0.0后出现报错,即使尝试降级Pandas、更换Databricks集群运行时仍无法解决,错误信息如下:

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'

已知Pandas 2.0.0移除了iteritems()方法,且错误触发于Spark内部函数。

解决方案
  • 临时快速解决:禁用Arrow优化
    直接在代码中关闭Spark的Arrow优化开关,避免触发调用iteritems()的逻辑:
spark.conf.set("spark.sql.execution.arrow.pyspark.enabled", "false")
# 之后再执行转换
spark.createDataFrame(pd.DataFrame({'i':[1,2,3],'j':[1,2,3]}))
  • 长期稳定方案:匹配Spark与Pandas兼容版本
    Spark不同版本对Pandas的支持有明确对应关系:

    • 若使用Spark 3.3.2+或3.4.x及以上版本:可以直接使用Pandas 2.0.0+,这些Spark版本已经修复了适配Pandas 2.0的兼容问题
    • 若使用Spark 3.3.0/3.3.1版本:要么升级Spark到3.3.2+,要么降级Pandas到1.x系列的最后稳定版(比如Pandas 1.5.3)
    • 若使用Spark 3.2.x及更早版本:必须使用Pandas 1.x系列(如1.5.3),因为旧Spark的Arrow实现依赖iteritems()方法
  • 备选方案:手动转换数据结构
    绕开Spark内部的Pandas处理逻辑,把Pandas DataFrame转成字典列表后再创建Spark DataFrame:

pdf = pd.DataFrame({'i':[1,2,3],'j':[1,2,3]})
spark.createDataFrame(pdf.to_dict('records'))

内容的提问来源于stack exchange,提问作者data en

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 00:47:27