Databricks:从pandas创建spark数据框架时的问题

回答 3 浏览 3830 2023-04-04

我有一个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'
data en 提问于2023-04-04
3 个回答
#1楼 已采纳
得票数 7

这与使用的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中其他软件包的兼容性经过了测试。

Alex Ott 提问于2023-04-04
这是我正在寻找的理想答案。谢谢。Ak777 2023-04-19
#2楼
得票数 2

由于缺少'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

Saxtheowl 提问于2023-04-04
我已经禁用了它。但还是出现了同样的错误。data en 2023-04-04
在再次运行你的代码之前,你是否清除了缓存? 也可以试试我的代码Saxtheowl 2023-04-04
#3楼
得票数 1

这个问题的出现是由于Pandas的版本<=2.0。在Pandas 2.0中,.iteritems函数被移除。

这个问题有两个解决方案。

  1. 下调pandas的版本 < 2.例如,、

pip install -U pandas==1.5.3

  1. 使用最新的Spark版本,即3.4版本。
Ranga Reddy 提问于2023-04-12
Ranga Reddy 修改于2023-05-23