文章目錄
- 前言
- 安裝過程
- 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等等。
不過還是得吐槽下,這個問題真惡心,哈哈。