Python 属性错误:';非类型';对象没有属性';setCallSite';

Python 属性错误:';非类型';对象没有属性';setCallSite';,python,pyspark,statistics,apache-spark-sql,correlation,Python,Pyspark,Statistics,Apache Spark Sql,Correlation,在PySpark中,我希望使用以下代码计算两个数据帧向量之间的相关性(我在导入PySpark或createDataFrame时没有任何问题): 但是,我将AttributeError(AttributeError:'NoneType'对象没有属性'setCallSite')作为: AttributeError回溯(最近一次调用) 在() 6 df=spark.createDataFrame(数据,[“功能”]) 7. ---->8 r1=相关性.corr(df,“特征”).head() 9打印(

在PySpark中,我希望使用以下代码计算两个数据帧向量之间的相关性(我在导入PySpark或createDataFrame时没有任何问题):

但是,我将AttributeError(AttributeError:'NoneType'对象没有属性'setCallSite')作为:

AttributeError回溯(最近一次调用)
在()
6 df=spark.createDataFrame(数据,[“功能”])
7.
---->8 r1=相关性.corr(df,“特征”).head()
9打印(“皮尔逊相关矩阵:\n”+str(r1[0]))
/head中的usr/local/lib/python3.6/dist-packages/pyspark/sql/dataframe.py(self,n)
1130         """
1131如果n为无:
->1132 rs=自身头部(1)
1133如果没有,则返回rs[0]
1134返回自取(n)
/head中的usr/local/lib/python3.6/dist-packages/pyspark/sql/dataframe.py(self,n)
1132 rs=自身头部(1)
1133如果没有,则返回rs[0]
->1134返回自取(n)
1135
1136@ignore_unicode_前缀
/take中的usr/local/lib/python3.6/dist-packages/pyspark/sql/dataframe.py(self,num)
502[行(年龄=2,姓名=u'Alice'),行(年龄=5,姓名=u'Bob')]
503         """
-->504返回自我限制(num.collect())
505
506@自(1.3)
/collect(self)中的usr/local/lib/python3.6/dist-packages/pyspark/sql/dataframe.py
463[行(年龄=2,姓名=u'Alice'),行(年龄=5,姓名=u'Bob')]
464         """
-->465将SCCallSiteSync(self.\u sc)作为css:
466端口=self.\u jdf.collectToPython()
467返回列表(\u从\u套接字加载\u(端口,BatchedSerializer(PickleSerializer()))
/usr/local/lib/python3.6/dist-packages/pyspark/traceback\u utils.py in\uuuuuuuu enter\uuuuuuu(self)
70定义输入(自我):
71如果SCCallSiteSync.\u spark\u stack\u depth==0:
--->72 self.\u context.\u jsc.setCallSite(self.\u call\u site)
73 SCCallSiteSync.\u spark\u stack\u depth+=1
74
AttributeError:“非类型”对象没有属性“setCallSite”

有解决方案吗?

我不仅在
Correlation.corr(…)
dataframe中得到了相同的错误, 但是也要使用ldaModel.descripbetopics()

很可能是火花虫

他们忘了初始化
DataFrame::_sc._jsc
创建结果数据帧时的成员

每个数据帧通常都使用适当的JavaObject初始化此成员。

围绕此问题存在一个尚未解决的问题:

[注意:解决后,如果您使用的Spark版本比2019年10月更新,如果仍然遇到此问题,请向Apache Jira报告]

海报建议强制将DF的后端与Spark上下文同步:

df.sql_ctx.sparkSession._jsparkSession = spark._jsparkSession
df._sc = spark._sc

这对我们有效,希望在其他情况下也能有效。

获得该属性错误的原因有几个:

  • 您可以在初始化xContext之一之前使用sc.stop(其中x 可以是SQL、配置单元)。例如:

    sc = SparkContext.getOrCreate(conf = conf)  
    sc.stop() 
    spark = SQLContext(sc)  
    
  • 您的spark在群集上不同步


  • 因此,只要重新启动jupyter笔记本内核或重新启动应用程序(而不是spark上下文),它就会工作。

    请包括更多(全部)我可能错了,但你不需要导入pyspark来使用spark.CreateDataFrame请将错误放入代码框中,并以适当的格式将这些点从堆栈跟踪报告中删除,并显示整个堆栈跟踪。你省略了异常为ta的行这似乎确实是一个问题。我发现FPGrowth..model.freqItemsets.collect()也存在同样的问题将给出相同的错误。在
    ml.recommendation.ALS中发现一个类似的问题-这也部分解决了我的问题。我仍然在Spark 3.0.1上得到这个问题,并且它独立于Correlation.corr。我只是对现有的票证进行了回溯并提供了一些更多的信息。如果我提供了更多信息或建议,我会发回其他解决办法。
    
    df.sql_ctx.sparkSession._jsparkSession = spark._jsparkSession
    df._sc = spark._sc
    
    sc = SparkContext.getOrCreate(conf = conf)  
    sc.stop() 
    spark = SQLContext(sc)