Для людей, которые используют AngularJS , может справиться с этой ситуацией, используя Promises
.
Здесь it говорит,
Обещания могут использоваться для отключения асинхронных функций и позволяют объединять несколько функций вместе.
Вы можете найти приятное объяснение здесь .
Пример, найденный в docs , упомянутом ниже.
promiseB = promiseA.then( function onSuccess(result) { return result + 1; } ,function onError(err) { //Handle error } ); // promiseB will be resolved immediately after promiseA is resolved // and its value will be the result of promiseA incremented by 1.
Angular2 and Later
In
Angular2
, посмотрите на следующий пример, но его рекомендовал использоватьObservables
сAngular2
.search(term: string) { return this.http .get(`https://api.spotify.com/v1/search?q=${term}&type=artist`) .map((response) => response.json()) .toPromise();
}
Вы можете использовать это таким образом,
search() { this.searchService.search(this.searchField.value) .then((result) => { this.result = result.artists.items; }) .catch((error) => console.error(error)); }
См. здесь оригинал . Но TypScript не поддерживает native es6 Promises , если вы хотите его использовать, для этого вам может понадобиться плагин.
Кроме того, здесь представлены обещания spec определите здесь.
Вам нужно убедиться, что автономный проект, который вы запускаете, запускается с помощью python 3. Если вы отправляете свою автономную программу через spark-submit, тогда она должна работать нормально, но если вы запускаете ее с помощью python, убедитесь, что вы используете python3, чтобы запустить ваше приложение.
Также убедитесь, что вы установили переменные env в ./conf/spark-env.sh
(если он не существует, вы можете использовать spark-env.sh.template
в качестве базы.
Я запускал его в IPython (как описано в этой ссылке Jacek Wasilewski ) и получал это исключение; Добавлен файл PYSPARK_PYTHON
в файл ядра IPython и используется jupyter notebook для запуска и начал работать.
vi ~/.ipython/kernels/pyspark/kernel.json
{
"display_name": "pySpark (Spark 1.4.0)",
"language": "python",
"argv": [
"/usr/bin/python2",
"-m",
"IPython.kernel",
"--profile=pyspark",
"-f",
"{connection_file}"
],
"env": {
"SPARK_HOME": "/usr/local/spark-1.6.1-bin-hadoop2.6/",
"PYTHONPATH": "/usr/local/spark-1.6.1-bin-hadoop2.6/python/:/usr/local/spark-1
.6.1-bin-hadoop2.6/python/lib/py4j-0.8.2.1-src.zip",
"PYTHONSTARTUP": "/usr/local/spark-1.6.1-bin-hadoop2.6/python/pyspark/shell.py
",
"PYSPARK_SUBMIT_ARGS": "--master spark://127.0.0.1:7077 pyspark-shell",
"PYSPARK_DRIVER_PYTHON":"ipython2",
"PYSPARK_PYTHON": "python2"
}
"Исключение: у Python у работника разная версия 2.6, чем у драйвера 2.7, PySpark не может работать с разными второстепенными версиями".
blockquote>Fix (для среды Cloudera)
- Редактировать этот файл:
/opt/cloudera/parcels/cdh5.5.4.p0.9/lib/spark/conf/spark-env.sh
- Добавить следующие строки:
export PYSPARK_PYTHON=/usr/bin/python export PYSPARK_DRIVER_PYTHON=python
Я просто столкнулся с той же проблемой, и это шаги, которые я выполняю, чтобы предоставить версию Python. Я хотел запустить мои задания PySpark с помощью Python 2.7 вместо 2.6.
$SPARK_HOME
указывает (в моем случае /home/cloudera/spark-2.1.0-bin-hadoop2.7/
) conf
есть файл с именем spark-env.sh
]. Если у вас есть файл с именем spark-env.sh.template
, вам нужно будет скопировать файл в новый файл с именем spark-env.sh
. Таким образом, если вы загрузите отдельную автономную версию Spark, вы можете установить версию Python, к которой вы хотите запустить PySpark.
Я использую следующую среду
? python --version; ipython --version; jupyter --version
Python 3.5.2+
5.3.0
5.0.0
, и следующие псевдонимы хорошо работают для меня
alias pyspark="PYSPARK_PYTHON=/usr/local/bin/python3 PYSPARK_DRIVER_PYTHON=ipython ~/spark-2.1.1-bin-hadoop2.7/bin/pyspark --packages graphframes:graphframes:0.5.0-spark2.1-s_2.11"
alias pysparknotebook="PYSPARK_PYTHON=/usr/bin/python3 PYSPARK_DRIVER_PYTHON=jupyter PYSPARK_DRIVER_PYTHON_OPTS='notebook' ~/spark-2.1.1-bin-hadoop2.7/bin/pyspark --packages graphframes:graphframes:0.5.0-spark2.1-s_2.11"
В записной книжке я настроил среду следующим образом
from pyspark.context import SparkContext
sc = SparkContext.getOrCreate()
Выйди в это сегодня на работе. Администратор счел разумным использовать жесткий код Python 2.7 как PYSPARK_PYTHON
и PYSPARK_DRIVER_PYTHON
в $SPARK_HOME/conf/spark-env.sh
. Излишне говорить, что это сломало все наши рабочие места, которые используют любые другие версии или среды python (что составляет> 90% наших рабочих мест). @PhillipStich правильно указывает, что у вас могут не всегда быть разрешения на запись для этого файла, как и в нашем случае. Хотя настройка конфигурации в вызове spark-submit
является опцией, другая альтернатива (при запуске в режиме пряжи / кластера) заключается в установке переменной среды SPARK_CONF_DIR
для указания на другой сценарий конфигурации. Там вы можете установить PYSPARK_PYTHON и любые другие параметры, которые могут вам понадобиться. Шаблон можно найти в исходном коде spark_env.sh на github .
Вы можете указать версию Python для драйвера, установив соответствующие переменные среды в файле ./conf/spark-env.sh
. Если он еще не существует, вы можете использовать предоставленный файл spark-env.sh.template
, который также включает в себя множество других переменных.
Вот простой пример файла spark-env.sh
для установки соответствующих переменных среды Python :
#!/usr/bin/env bash
# This file is sourced when running various Spark programs.
export PYSPARK_PYTHON=/usr/bin/python3
export PYSPARK_DRIVER_PYTHON=/usr/bin/ipython
В этом случае он устанавливает версию Python, используемую рабочими / исполнителями, для Python3 и версию драйвера Python для iPython для более удобной оболочки.
Если у вас еще нет файла spark-env.sh
и не нужно устанавливать какие-либо другие переменные, это должно делать то, что вы хотите, предполагая, что пути к соответствующим бинарным файлам python верны (проверьте с помощью which
) , У меня была аналогичная проблема, и это исправило это.
Если вы хотите изменить версию python для текущей задачи, вы можете использовать следующую команду запуска pyspark:
PYSPARK_DRIVER_PYTHON=/home/user1/anaconda2/bin/python PYSPARK_PYTHON=/usr/local/anaconda2/bin/python pyspark --master ..
Если вы используете Spark в более крупной организации и не можете обновить файл /spark-env.sh, экспорт переменных среды может не сработать.
Вы можете добавить определенные параметры искры через --conf
при отправке задания во время выполнения.
pyspark --master yarn --[other settings]\
--conf "spark.pyspark.python=/your/python/loc/bin/python"\
--conf "spark.pyspark.driver.python=/your/python/loc/bin/python"
У меня такая же проблема на автономной искре в окнах. Моя версия исправления выглядит так: у меня были переменные окружения, как показано ниже:
PYSPARK_SUBMIT_ARGS="pyspark-shell"
PYSPARK_DRIVER_PYTHON=jupyter
PYSPARK_DRIVER_PYTHON_OPTS='notebook' pyspark
С помощью этого параметра я выполнил действие на pyspark и получил следующее исключение:
Python in worker has different version 3.6 than that in driver 3.5, PySpark cannot run with different minor versions.
Please check environment variables PYSPARK_PYTHON and PYSPARK_DRIVER_PYTHON are correctly set.
Чтобы проверить, с какой версией python мой искровой рабочий использует, нажмите следующее в приглашении cmd .
python --version
Python 3.6.3
, который показал мне Python 3.6.3 . Таким образом, мой искровой рабочий использует системный python, который является v3.6.3.
Теперь, когда я установил искровой драйвер , чтобы запустить jupyter, установив PYSPARK_DRIVER_PYTHON=jupyter
, поэтому мне нужно проверить версию python, используемую jupyter.
Чтобы сделать это, откройте Anaconda Prompt и нажмите
python --version
Python 3.5.X :: Anaconda, Inc.
jupyter python использует v3.5.x . Вы можете проверить эту версию и в любом ноутбуке (Help-> About).
Теперь мне нужно обновить jupyter python до версии v3.6.6 . Для этого откройте Anaconda Prompt и нажмите
conda search python
blockquote>. Это даст вам список доступных python версии в Анаконде. Установите желаемый с помощью
conda install python = 3.6.3
blockquote>Теперь у меня есть обе установки на Python той же версии 3.6.3. Искра не должна и это не произошло, когда я запустил Action on Spark-driver. Исключение ушло. Счастливое кодирование ...
Помог в моем случае:
import os
os.environ["SPARK_HOME"] = "/usr/local/Cellar/apache-spark/1.5.1/"
os.environ["PYSPARK_PYTHON"]="/usr/local/bin/python3"
Я столкнулся с тем же сообщением об ошибке, и я попробовал три способа, упомянутые выше. Я перечислил результаты как дополнительную ссылку на другие.
PYTHON_SPARK
и PYTHON_DRIVER_SPARK
в spark-env.sh
для меня не работает. os.environ["PYSPARK_PYTHON"]="/usr/bin/python3.5"
os.environ["PYSPARK_DRIVER_PYTHON"]="/usr/bin/python3.5"
не работает для меня. ~/.bashrc
работает как заклинание ~