AttributeError: ‘NoneType‘ object has no attribute ‘setCallSite‘

文章讲述了在使用pyspark时遇到关于SparkSession和SparkContext的NoneTypesetCallSite属性错误,作者提供了通过设置_jsparkSession和_jsc属性的方法来解决问题,以及一个使用SparkContext的示例代码.
摘要由CSDN通过智能技术生成

使用pyspark的时候遇到下面的问题:

Traceback (most recent call last):
  File "C:\Users\xxx\xxx\xxx\xxx.py", line 90, in <module>
    df.toPandas().to_csv('before_eda.csv')
  File "C:\Anaconda\envs\spark\lib\site-packages\pyspark\sql\dataframe.py", line 2142, in toPandas
    pdf = pd.DataFrame.from_records(self.collect(), columns=self.columns)
  File "C:\Anaconda\envs\spark\lib\site-packages\pyspark\sql\dataframe.py", line 532, in collect
    with SCCallSiteSync(self._sc) as css:
  File "C:\Anaconda\envs\spark\lib\site-packages\pyspark\traceback_utils.py", line 72, in __enter__
    self._context._jsc.setCallSite(self._call_site)
AttributeError: 'NoneType' object has no attribute 'setCallSite'

上网查了很多,不过我看似乎都是有关SparkSession的,可以参考这几篇:

AttributeError: 'NoneType' 对象没有'setCallSite'属性

pyspark AttributeError: 'NoneType' object has no attribute 'setCallSite'

具体来说,就是建议添加如下代码:

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

这里的spark变量是这样定义的:

spark = pyspark.sql.SparkSession.builder.getOrCreate()

不过,我用的是SparkContext,这种办法对我没用,我最后用的是:

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

这样之后代码可以运行。

简单示例代码:

from pyspark import SparkContext, SparkConf
from pyspark.python.pyspark.shell import spark


conf = SparkConf().setAppName("spark_part").setMaster("local[4]")
sc = SparkContext(conf=conf)
rdd = sc.textFile("./xxx.csv")

# 一些处理
# ...

df = rdd.map(lambda line: Row(**GetRows(line))).toDF()  # 转化为dataframe

# ----------关键代码---------
df.sql_ctx.sparkSession._jsparkSession = spark._jsparkSession
df._sc._jsc = sc._jsc
# --------------------------

df.toPandas().to_csv('test.csv')  
sc.stop()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_62488776

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值