社内se × プログラマ × ビッグデータ

プログラミングなどITに興味があります。

pyspark TypeError: namedtuple() missing 3 required keyword-only arguments

$ /usr/local/spark/bin/spark-submit --master local[1] textStream.py
Traceback (most recent call last):
  File "/home/mh/workspace/spark/pyspark-practice/textStream.py", line 1, in <module>
    from pyspark import SparkContext
-------
pyspark TypeError: namedtuple() missing 3 required keyword-only arguments

タイトルのエラーメッセージ、最初の import の部分で躓いていました。

from pyspark import SparkContext

調べてみると、spark 2.1.0 以下のバージョンについては、python 3.6 をサポートしていないらしい。
現在使っている python のバージョンは、3.6.3 で spark のバージョンは 1.6

$ python
Python 3.6.3 |Anaconda, Inc.| (default, Oct 13 2017, 12:02:49) 

とりあえず、既に python 2.7.6 もインストール済みだったので python 側のバージョンを下げてみることに。
.bashrc に以下を適用することで、デフォルトのバージョンが変更が変更される。

# default python
alias python='/usr/bin/python2.7'
$ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56) 

よしこれで大丈夫!再実行!!したが、同じエラー。。。
pyspark で使用する python のバージョンは PYSPARK_PYTHON で定義してあげる必要がありました。

export PYSPARK_PYTHON=/usr/bin/python2.7
$ /usr/local/spark/bin/spark-submit --master local[1] textStream.py

これでエラーは表示されなくなりました。