2017-02-20 4 views
7

Я установил Spark в Windows, и я не могу запустить 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

Я могу назвать несколько вещей, которые вы делаете неправильно - _ (1) _ отформатированный ваши записи журнала, как «BLOCKQUOTE» (используется для цитирования обычного текста, например, в документации) вместо «образца кода»; _ (2) _ вы не упоминали версию Spark, которую вы установили: _ (3) _ вы даже не пытались использовать Google 'spark TypeError: namedtuple() отсутствовали 3 требуемых аргумента только для ключевого слова, которые показали бы https: //issues.apache.org/jira/browse/SPARK-19019 в качестве верхнего ответа. –

+0

Пожалуйста, постарайтесь сохранить окончание строки в своей трассе, чтобы сделать ее доступной для чтения. – Eric

ответ

7

Spark < = 2.1.0 не совместим с Python 3.6. См. this issue, в котором также утверждается, что это будет исправлено с предстоящим выпуском Spark.

+0

У меня такая же проблема! Я не знал, что Spark 2.1.0 несовместим с Python 3.6. – titipata

+0

Is Spark-2.2.0 совместим с Python-3.6. Есть идеи ? – JKC

+0

@JKC Согласно связанной проблеме, 2.2.0 должен работать нормально и 2.1.1. – karlson

6

Я решил эту проблему, используя одно изменение в скрипте pythons.

У меня есть место ниже фрагмент кода в питон скрипт с именем serializers.py, расположение c:\your-installation-dir\spark-2.0.2-bin-hadoop-2.7\python\pyspark\ и ниже линии, которая будет заменить на номер строки 381.

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

А затем запустить pyspark в командной строке вашей этой будет работать.

+1

Это решает проблему, просто пояснив ниже, не стесняйтесь редактировать эту информацию, чтобы завершить свой ответ. –

+1

Это разрешило начальную проблему, но я считаю, что зависимости намного сложнее, это только фиксировало первое из многих столкновений. –

2

Я хотел продолжить ответ Indrajeet, так как он упомянул номера строк вместо точного местоположения кода. Пожалуйста, см. Это в дополнение к его ответу для дальнейших разъяснений.

ЦБС = _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) 

!!! EDIT 6 марта 2017 года! Это исправить исходную проблему, но я не думаю, что это сделает искра 2.1 совместимой с 3.6, но было еще больше столкновений. В результате я использовал conda для создания виртуальной среды python 35, и она работала как шарм.

(Windows, если у вас есть ENV переменные в месте)

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

Hi @ D.S. Я создал новую среду для python = 3.5, как вы предложили, но когда я ввел pyspark, я получаю сообщение об ошибке: «pyspark не распознается как внутренняя или внешняя команда», хотя я правильно установил переменные среды spark_home и pythonpath. Какие-либо материалы о том, как это разрешить? – JKC

+0

Это было некоторое время назад, но я понял, что это не стоит усилий для этого в окне окна, поэтому я создал виртуальный бокс с изображением ubuntu, и моя работа продвигалась намного быстрее. Я знаю, что это не исправляет вашу немедленную проблему, но если вы сделаете переключатель, вы сэкономите гораздо больше времени на борьбу с такими раздражающими конфликтами. –

0

возможные проблемы, с которыми сталкиваются при работе искру на Windows, это, не давая правильный путь или с помощью Python 3.x для запуска Спарк.

Так,

  1. Как проверить путь отданных за искрового то есть/USR/местные/искра Правильное или нет.
  2. Установить Python Path на Python 2.x (удалить Python 3.x).
13

Spark 2.1.0 не поддерживает python 3.6.0. Чтобы решить эту проблему, измените свою версию python в среде anaconda. выполнить следующую команду в вашем анаконды окр

conda create -n py35 python=3.5 anaconda 
activate py35 
Смежные вопросы