なんとな~くしあわせ?の日記

「そしてそれゆえ、知識そのものが力である」 (Nam et ipsa scientia potestas est.) 〜 フランシス・ベーコン

PySparkのハマり(メモ)

pipで取得したpysparkを起動させると、以下のようなエラーが出ることがある。
Sparkのバージョンは2.3.1。

(venv) C:\Users\hiroyuki.nagata\PycharmProjects\vjsk-etl-flow>pyspark
Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:24:40) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
2019-01-09 09:46:27 WARN  NativeCodeLoader:62 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Traceback (most recent call last):
  File "C:\spark-2.3.1-bin-hadoop2.7\python\pyspark\shell.py", line 38, in 
    SparkContext._ensure_initialized()
  File "C:\spark-2.3.1-bin-hadoop2.7\python\pyspark\context.py", line 292, in _ensure_initialized
    SparkContext._gateway = gateway or launch_gateway(conf)
  File "C:\spark-2.3.1-bin-hadoop2.7\python\pyspark\java_gateway.py", line 120, in launch_gateway
    auto_convert=True))
TypeError: __init__() got an unexpected keyword argument 'auth_token'

コードを辿ってみると、どうやら起動したPySparkが呼び出している関数の引数でpy4jを呼び出しているのだが、そいつの名前付き引数"auth_token"が、py4j側で削除されてるらしい。どう見てもpipのパッケージ管理でpysparkとpy4jのバージョンの整合性が無いように見える。

原因はpipで用意したpysparkがv2.2.1で、インストールされているsparkがv2.3.1であることだった。後で入れ替えとくか…