2017-02-20 24 views
7

Zainstalowałem Spark na Windowsie i nie mogę uruchomić pyspark. Po wpisaniu w c:\Spark\bin\pyspark, pojawia się następujący błąd:Nie można uruchomić 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'

co robię źle tutaj?

+0

mogę wymienić tylko kilka rzeczy, które robisz źle - _ (1) _ sformatowany wpisy dziennika jako „blockquote” (używany do cytowania zwykły tekst np dokumentację) zamiast "próbki kodu"; _ (2) _ nie wspominałeś o zainstalowanej wersji Sparka: _ (3) _ nawet nie próbowałeś Google 'iskry TypeError: namedtuple() brakuje 3 wymaganych argumentów tylko słów kluczowych' które wykazałyby https: //issues.apache.org/jira/browse/SPARK-19019 jako najwyższa odpowiedź. –

+0

Staraj się zachować końcówki linii w swoim miejscu początkowym, aby była ona czytelna. – Eric

Odpowiedz

7

Spark < = 2.1.0 nie jest kompatybilny z Pythonem 3.6. Zobacz: this issue, która także twierdzi, że zostanie to naprawione w nadchodzącym wydaniu Sparka.

+0

Mam ten sam problem! Nie wiedziałem wcześniej, że Spark 2.1.0 nie jest kompatybilny z Pythonem 3.6. – titipata

+0

Czy Spark-2.2.0 jest kompatybilny z Pythonem-3.6. Dowolny pomysł ? – JKC

+0

@JKC Zgodnie z połączonym problemem, 2.2.0 powinno działać poprawnie, a także 2.1.1. – karlson

6

Rozwiązałem ten problem, używając jednej zmiany w skrypcie pythonów.

mam miejsce poniżej kawałek kodu w Pythonie skrypt o nazwie serializers.py, lokalizacja jest c:\your-installation-dir\spark-2.0.2-bin-hadoop-2.7\python\pyspark\ i poniżej linii należy wymienić na numer linii 381.

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

A następnie uruchomić pyspark w linii poleceń tego zadziała ..

+1

To rozwiązuje problem, wystarczy trochę więcej wyjaśnień poniżej, zachęcamy do edycji w tej informacji, aby ukończyć twoją odpowiedź. –

+1

To rozwiązało początkowy problem, ale uważam, że zależności są o wiele bardziej skomplikowane, to tylko naprawiło pierwszą z wielu kolizji. –

2

Chciałam rozszerzyć odpowiedź Indrajeeta, ponieważ wspomniał on o numerach linii zamiast o dokładnej lokalizacji kodu. Zobacz to oprócz jego odpowiedzi na dalsze wyjaśnienia.

CLS = _old_namedtuple (* args, ** kwargs)
jest linia, która została zmieniona skierowania w swojej odpowiedzi

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) 

!!! EDYTUJ 6 marca 2017 r. !! Naprawiono pierwotny problem, ale nie sądzę, że spowoduje to, że iskra 2.1 będzie kompatybilna z wersją 3.6, ale jeszcze więcej kolizji. W rezultacie użyłem conda do stworzenia wirtualnego środowiska Pythona 35 i zadziałało to jak czar.

(Windows, zakładając, że masz zmienne env In Place)

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

Witam @ D.S. Stworzyłem nowe środowisko dla python = 3.5, jak sugerowałeś, ale kiedy wszedłem do pysparka, otrzymuję komunikat o błędzie "pyspark nie jest rozpoznawany jako wewnętrzne lub zewnętrzne polecenie", mimo że mam poprawnie ustawione zmienne środowiskowe isk_home i pythonpath. Wszelkie dane wejściowe dotyczące sposobu rozwiązania tego problemu? – JKC

+0

To był jakiś czas temu, ale zdałem sobie sprawę, że nie jest to warte wysiłku, aby to zrobić na oknie Windows, więc skonfigurowałem wirtualną skrzynkę z obrazem ubuntu, a moja praca była o wiele szybsza. Wiem, że to nie rozwiązuje twojego bezpośredniego problemu, ale jeśli dokonasz zmiany, zaoszczędzisz o wiele więcej czasu na zwalczanie takich irytujących konfliktów. –

0

w problemach, jakie napotykają podczas pracy w systemie Windows Spark jest, nie dając właściwą ścieżkę lub za pomocą Pythona 3.x uruchomić Spark.

Więc

  1. Czy sprawdzić ścieżki podanej iskry I.E/usr/local/iskra Właściwa czy nie.
  2. Ustawić Python Path na Python 2.x (usunąć Python 3.x).
13

Program Spark 2.1.0 nie obsługuje programu python 3.6.0. Aby rozwiązać ten problem, należy zmienić wersję python w środowisku anakonda. Uruchom następujące polecenie w anaconda ENV

conda create -n py35 python=3.5 anaconda 
activate py35 
Powiązane problemy