出现AttributeError: 'DataFrame' object has no attribute 'shape'错误

3
python

我正在使用以下方式将CSV文件读入Pyspark数据框(InputDataFrame):

InputDataFrame = spark.read.csv(path=file_path,inferSchema=True,ignoreLeadingWhiteSpace=True,header=True)

阅读完了之后,我正在使用:
InputDataFrame.schema.names 

查找列名。但我在控制台上得到了以下日志:

Traceback (most recent call last):

  File "/snap/pycharm-community/143/helpers/pydev/_pydevd_bundle/pydevd_xml.py", line 284, in frame_vars_to_xml
    xml += var_to_xml(v, str(k), evaluate_full_value=eval_full_val) 

  File "/snap/pycharm-community/143/helpers/pydev/_pydevd_bundle/pydevd_xml.py", line 384, in var_to_xml
    xml_shape = ' shape="%s"' % make_valid_xml_value(str(v.shape))  

  File "/home/ajinkya/.local/lib/python3.6/site-packages/pyspark/sql/dataframe.py", line 1300, in __getattr__
    "'%s' object has no attribute '%s'" % (self.__class__.__name__, name))  

AttributeError: 'DataFrame' object has no attribute 'shape'  
Unexpected error, recovered safely.

有人能解释一下为什么会发生这种情况吗?还有没有其他方法可以找到Pyspark Dataframe的推断模式。

''' 使用Pycharm IDE进行开发 '''


1
你可以使用 InputDataFrame.printSchema() - MaFF
请提供您的代码,根据错误信息 File "/snap/pycharm-community/143/helpers/pydev/_pydevd_bundle/pydevd_xml.py", line 384, in var_to_xml xml_shape = ' shape="%s"' % make_valid_xml_value(str(v.shape)) ,您在第384行调用了v.shape,而v是一个Spark DataFrame,而Spark DataFrame并没有shape属性。 - Paul
抱歉,我弄错了。 你在PyCharm中通过调试运行吗?你的Spark会话是本地的还是在集群上使用远程执行? - Paul
@Paul 是的,我正在使用PyCharm本地调试和Pyspark解释器。 - Ajinkya Bhore
我遇到的问题是因为我的数据列名中有'.'。记得用其他字符替换它,比如'_'。谢谢。 我的问题已经解决了。 - Ajinkya Bhore
显示剩余2条评论
3个回答

2

我在迁移到最新版本的Pycharm之后,一些以前正常运行的代码出现了相同的问题。

我猜您正在使用最新的Pycharm版本(2019.2)。虽然我不知道为什么会导致这个问题,但是安装旧版本的Pycharm 2019.1.4对我有所帮助,问题得到了解决。

Original Answer 翻译成 "最初的回答"。


会尝试做到。 - Ajinkya Bhore
我可以确认使用旧版本(2019.1.4)解决了这个问题。谢谢! - mirkhosro
我把PyCharm更新到了2019.2.1版本,现在它运行得很好。非常感谢你,Ben! - Jelena Lazarevic

2

同意,在pycharm 2019.2上运行没有问题。在某个地方设置断点,进行调试会出现错误。

    spark = SparkSession.builder.getOrCreate()
    pdf = pd.DataFrame({'A': ['asdf', 'fdsa'], 'B': [1, 2]})
    sdf = spark.createDataFrame(pdf)
    print(pdf)
    sdf.show()

0
我同意Ben的观点。新版本的PyCharm代码期望包含“shape”属性的Pandas DataFrame,而不是RDD DataFrame(它不包含此属性)。您需要回滚到旧版本或等待JetBrains发布修复版。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接