文章目录
- 前言
- 安装过程
- Q1
- 总结:
前言
最近由于工作需要,需要了解下pyspark,所以就在win10环境下装了下,然后在pycharm中使用的时候碰到了一些问题。整个过程可谓是一波三折。下面一一道来。
安装过程
安装过程就不详细说了,网上一搜一大堆,这里写下自己参考的博文:
https://blog.csdn.net/w417950004/article/details/77203501
安装好之后如何在pycharm中使用?
网上有文章说要在对应的文件中配置相关的spark_home地址等。
详情参考:https://www.cnblogs.com/hello-yz/p/9306099.html
其实没必要,因为我们在按照上面博文安装pyspark的过程中声明了相关的变量为全局变量,所以完全没必要在pycharm的文件中重复声明,相反这样做可能会带来一些负面效果。这时候,只需要将pyspark的代码放入pycharm中运行即可。但是中间会遇到一些问题下面一一来解答。
Q1
在pycharm中执行pyspark脚本报错:TypeError: namedtuple() missing 3 required keyword-only arguments: 'rename’
原因:pyspark和python版本不兼容。
解决办法:
参考:https://blog.csdn.net/u010916338/article/details/106108266
但是博主按照上面的解决方案降低python版本到3.5之后,问题依旧存在。
事情的过程:
背景:
博主之前就装的有python3.7版本的anaconda。所以为了不影响之前的3.7环境,选择了通过利用conda建虚拟环境的方法来新建3.5的虚拟环境,然后将pycharm的解释器更换为3.5的虚拟环境,来运行pyspark代码。but,问题依旧存在。(PS:很郁闷,不是说好的是版本的兼容的问题,我按照方案降了版本,为什么还是报上面的错误)无奈,以为是解决方案的问题,遂又google,baidu了一番。发现这个错位的原因就是spark和python版本兼容的问题,解决方案没问题。那到底是哪的原因呢?
为了解决心中的疑惑,博主走上了实验之路,先是在windows命令行以命令的形式利用python3.5解释器去运行脚本如: " ######\envs\python35 ######\pyspark_demo.py" ,依旧报上面的版本不兼容的错误。接下来在命令行,通过"activate py35"指令开启python3.5虚拟环境,然后执行“python ######\pyspark_demo.py”指令,运行pyspark程序竟然跑通了。。。一脸问号,这是为什么呢?为什么只有进入虚拟环境运行脚本才能跑通,在外部通过虚拟环境指令运行脚本就跑不通呢?
后面分析可能是spark包在被调用的时候,引用的系统默认的python环境,当时我的默认python环境为3.7(也就是你在命令行输入python指令,启动的是3.7版本)。所以如果你没有进入python3.5的虚拟环境,而是在外部执行pyspark程序的话,系统默认的python环境永远是3.7版本。但是当你激活python3.5的虚拟环境的时候,此时系统默认的python环境就是python3.5版本。
为了印证猜想,就在系统变量中将python3.5的虚拟环境变量声明到python3.7的前面,将其覆盖。
如下图所示:
此时系统默认python环境为3.5
此时再通过pycharm运行pyspark的时候,就通过了。
总结:
如果你是第一次装anaconda,也许不会碰到这样的问题,如果你装的anaconda是python3.6的版本也许也不会碰到这样的问题,但是如果你和我一样很不幸,装的是python3.7版本的anaconda,并且不想动之前的环境,创建了一个虚拟环境来玩,那么“恭喜你”,大概率会碰到这样的问题。
不过,不用头疼,解决问题的方法很多,就算不用这种方法,你还可以曲线救国,比如重装python低版本的anaconda等等。
不过还是得吐槽下,这个问题真恶心,哈哈。