2017-02-20 21 views
7

WindowsにSparkをインストールしましたが、私はpysparkを開始できません。 c:\Spark\bin\pysparkと入力すると、次のエラーが表示されます。pysparkを実行できません

Python 3.6.0 |Anaconda custom (64-bit)| (default, Dec 23 2016, 11:57:41) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. Traceback (most recent call last): File "c:\Spark\bin..\python\pyspark\shell.py", line 30, in import pyspark File "c:\Spark\python\pyspark__init__.py", line 44, in from pyspark.context import SparkContext File "c:\Spark\python\pyspark\context.py", line 36, in from pyspark.java_gateway import launch_gateway File "c:\Spark\python\pyspark\java_gateway.py", line 31, in from py4j.java_gateway import java_import, JavaGateway, GatewayClient File "", line 961, in _find_and_load File "", line 950, in _find_and_load_unlocked File "", line 646, in _load_unlocked File "", line 616, in _load_backward_compatible File "c:\Spark\python\lib\py4j-0.10.4-src.zip\py4j\java_gateway.py", line 18, in File "C:\Users\Eigenaar\Anaconda3\lib\pydoc.py", line 62, in import pkgutil File "C:\Users\Eigenaar\Anaconda3\lib\pkgutil.py", line 22, in ModuleInfo = namedtuple('ModuleInfo', 'module_finder name ispkg') File "c:\Spark\python\pyspark\serializers.py", line 393, in namedtuple cls = _old_namedtuple(*args, **kwargs) TypeError: namedtuple() missing 3 required keyword-only arguments: 'verbose', 'rename', and 'module'

私はここで間違っていますか?

+0

で以下のコマンド 実行私はあなたが間違ってやっている物事のカップルに名前を付けることができます) "コードサンプル"の代わりに。あなたがインストールしたSparkのバージョンについては言及していませんでした:_(3)_あなたはGoogleに 'spark TypeError:namedtuple()missing 3 required keyword-only arguments'を試したこともありませんでした。 //issues.apache.org/jira/browse/SPARK-19019を最上位の回答とします。 –

+0

行末をトレースバックに保存して、リモートで読み取り可能にしてください。 – Eric

答えて

7

スパーク< = 2.1.0はPython 3.6と互換性がありません。 this issueを参照してください。これは、今後のSparkリリースで修正される予定です。

+0

私は同じ問題があります! Spark 2.1.0はPython 3.6と互換性がありません。 – titipata

+0

Spark-2.2.0はPython-3.6と互換性があります。何か案が ? – JKC

+0

@JKCリンクされた問題によれば、2.2.0はうまく動作するはずです。2.1.1も同様です。 – karlson

6

この問題は、pythonsスクリプトの変更を1つ使用して解決しました。

私は行番号381

cls = _old_namedtuple(*args, **kwargs, verbose=False, rename=False, module=None) 

に交換し、その後、あなたのコマンドラインにこれ​​をpysparkを実行するserializers.pyという名前のPythonスクリプトで、場所はc:\your-installation-dir\spark-2.0.2-bin-hadoop-2.7\python\pyspark\で、線の下のコードの一部、以下の場所を持っています

+1

これは問題を解決し、以下の説明を少しお読みいただき、この情報を自由に編集して回答を完成させてください。 –

+1

これは最初の問題を解決しましたが、依存関係ははるかに複雑であると私は信じています。 –

2

私はIndrajeetの答えを拡張したいと思いました。コードの正確な場所の代わりに行番号を記述していたからです。これ以上の明確化のために彼の答えに加えてこれを見てください。

CLS = _old_namedtuple(* argsを、** kwargsからは)
は彼の答え

def _hijack_namedtuple(): 
""" Hack namedtuple() to make it picklable """ 
# hijack only one time 
if hasattr(collections.namedtuple, "__hijack"): 
    return 

global _old_namedtuple # or it will put in closure 

def _copy_func(f): 
    return types.FunctionType(f.__code__, f.__globals__, f.__name__, 
           f.__defaults__, f.__closure__) 

_old_namedtuple = _copy_func(collections.namedtuple) 

def namedtuple(*args, **kwargs): 
    # cls = _old_namedtuple(*args, **kwargs) 
    cls = _old_namedtuple(*args, **kwargs, verbose=False, rename=False, module=None) 
    return _hack_namedtuple(cls) 

で言及されて変更されたラインです! 2017年3月6日編集! これは元の問題を修正しましたが、これは3.6と互換性のあるスパーク2.1をまだ作成していないと考えています。その結果、私はpython 35仮想環境を作成するためにcondaを使用し、それは魅力的な働きをしました。

適切なパスを与えていないのか、スパークを実行するためのPython 3.xのを使用することにより、

>conda create -n py35 python=3.5 
>activate py35 
>pyspark 
+0

こんにちは。あなたが提案したように私はpython = 3.5の新しい環境を作りましたが、私はpysparkに入ったときにspark_homeとpythonpath環境変数を適切に設定していても "pysparkが内部コマンドまたは外部コマンドとして認識されません"どのようにこれを解決するための入力? – JKC

+0

これはしばらく前のことですが、Windowsのボックスでこれを行う努力をする価値がないことを認識したので、私はubuntuイメージで仮想ボックスを設定しました。私はこれがあなたの直面する問題を解決するものではないことを知っていますが、あなたがスイッチを作れば、そのような厄介な紛争と戦うのにもっと多くの時間を節約できます。 –

0

Windows上でスパークを実行するときに直面する可能性のある問題である(あなたと仮定するとWindowsは、ENV場所の変数を持っています)。

ので、

  1. は、スパークすなわちは/ usr/local /適切なスパークまたはないために与えられたパスをチェックしてください。
  2. Python Path to Python 2.x(Python 3.xを削除)を設定します。
13

spark 2.1.0はpython 3.6.0をサポートしていません。 これを解決するには、anaconda環境でPythonのバージョンを変更します。プレーンテキストなどの文書を引用するために使用さ_(1)_あなたが「BLOCKQUOTE」としてあなたのログエントリをフォーマットされた( - あなたのアナコンダのENV

conda create -n py35 python=3.5 anaconda 
activate py35 
関連する問題