Настройка Spark для работы с Jupyter Notebook и Anaconda
я провел несколько дней, пытаясь заставить Spark работать с моим блокнотом Jupyter и Anaconda. Вот что мое .файл выглядит так:
PATH="/my/path/to/anaconda3/bin:$PATH"
export JAVA_HOME="/my/path/to/jdk"
export PYTHON_PATH="/my/path/to/anaconda3/bin/python"
export PYSPARK_PYTHON="/my/path/to/anaconda3/bin/python"
export PATH=$PATH:/my/path/to/spark-2.1.0-bin-hadoop2.7/bin
export PYSPARK_DRIVER_PYTHON=jupyter
export PYSPARK_DRIVER_PYTHON_OPTS="notebook" pyspark
export SPARK_HOME=/my/path/to/spark-2.1.0-bin-hadoop2.7
alias pyspark="pyspark --conf spark.local.dir=/home/puifais --num-executors 30 --driver-memory 128g --executor-memory 6g --packages com.databricks:spark-csv_2.11:1.5.0"
когда я типа /my/path/to/spark-2.1.0-bin-hadoop2.7/bin/spark-shell
, Я могу запустить Spark просто отлично в моей командной строке оболочки. И выход sc
не пуст. Кажется, это работает нормально.
когда я типа pyspark
, он запускает мой ноутбук Jupyter в порядке. Когда я создаю новый ноутбук Python3, появляется эта ошибка:
[IPKernelApp] WARNING | Unknown error in handling PYTHONSTARTUP file /my/path/to/spark-2.1.0-bin-hadoop2.7/python/pyspark/shell.py:
и sc
в моем Jupyter Блокнот пуст.
может кто-нибудь помочь решить эту ситуацию?
просто хочу уточнить: после двоеточия в конце ошибки ничего нет. Я также попытался создать свой собственный файл запуска, используя этот в должности и я цитирую здесь, чтобы вам не пришлось смотреть туда:
Я создал короткий сценарий инициализации init_spark.py следующим образом:
from pyspark import SparkConf, SparkContext conf = SparkConf().setMaster("yarn-client") sc = SparkContext(conf = conf)
и положил его в ~/.ipython / profile_default/запуск/ каталог
когда я это сделал, ошибка потом стал:
[IPKernelApp] WARNING | Unknown error in handling PYTHONSTARTUP file /my/path/to/spark-2.1.0-bin-hadoop2.7/python/pyspark/shell.py:
[IPKernelApp] WARNING | Unknown error in handling startup files:
2 ответов
Conda может помочь правильно управлять многими зависимостями...
установить spark. Предполагая, что spark установлен в /opt /spark, включите это в свой~/.bashrc следующее:
export SPARK_HOME=/opt/spark
export PATH=$SPARK_HOME/bin:$PATH
создайте среду conda со всеми необходимыми зависимостями, кроме spark:
conda create -n findspark-jupyter-openjdk8-py3 -c conda-forge python=3.5 jupyter=1.0 notebook=5.0 openjdk=8.0.144 findspark=1.1.0
активировать окружающей среды
$ source activate findspark-jupyter-openjdk8-py3
запустите сервер ноутбуков Jupyter:
$ jupyter notebook
в вашем браузере создайте новый ноутбук Python3
попробуйте вычислить PI со следующим скриптом (заимствованным из этой)
import findspark
findspark.init()
import pyspark
import random
sc = pyspark.SparkContext(appName="Pi")
num_samples = 100000000
def inside(p):
x, y = random.random(), random.random()
return x*x + y*y < 1
count = sc.parallelize(range(0, num_samples)).filter(inside).count()
pi = 4 * count / num_samples
print(pi)
sc.stop()
Ну, это действительно дает мне боль, чтобы увидеть, как сраные писаки, как установка PYSPARK_DRIVER_PYTHON=jupyter
, были повышены до "решений" и теперь имеют тенденцию становиться стандартными практиками, несмотря на то, что они, очевидно, приводят к некрасиво результатов, как писать pyspark
и в конечном итоге с блокнотом Jupyter вместо оболочки PySpark, плюс еще-невидимые проблемы, скрывающиеся ниже по течению, например, когда вы попробуйте использовать spark-submit
с вышеуказанными настройками... :(
(не понимаю неправильно, это не ваша вина, и я не обвиняю вас; я видел десятки сообщений здесь, где это "решение" было предложено, принято и одобрено...).
существует один и только один правильный способ настроить ноутбук Jupyter для работы с другими языками (PySpark здесь), и это использование Jupyter ядер.
первое, что нужно сделать, это запустить jupyter kernelspec list
команда, чтобы получить список всех уже доступных ядер в вашей машине; вот результат в моем случае (Ubuntu):
$ jupyter kernelspec list
Available kernels:
python2 /usr/lib/python2.7/site-packages/ipykernel/resources
caffe /usr/local/share/jupyter/kernels/caffe
ir /usr/local/share/jupyter/kernels/ir
pyspark /usr/local/share/jupyter/kernels/pyspark
pyspark2 /usr/local/share/jupyter/kernels/pyspark2
tensorflow /usr/local/share/jupyter/kernels/tensorflow
первое ядро, python2
, является" по умолчанию " один приходит с IPython (есть большой шанс, что это единственный присутствующий в вашей системе); что касается остального, у меня есть еще 2 ядра Python (caffe
& tensorflow
), R один (ir
) и два ядра PySpark для использования с Spark 1.6 и Spark 2.0 соответственно.
записи списка выше являются каталогами, и каждый из них содержит один файл с именем kernel.json
. Давайте посмотрим содержимое этого файла для меня pyspark2
ядра:
{
"display_name": "PySpark (Spark 2.0)",
"language": "python",
"argv": [
"/opt/intel/intelpython27/bin/python2",
"-m",
"ipykernel",
"-f",
"{connection_file}"
],
"env": {
"SPARK_HOME": "/home/ctsats/spark-2.0.0-bin-hadoop2.6",
"PYTHONPATH": "/home/ctsats/spark-2.0.0-bin-hadoop2.6/python:/home/ctsats/spark-2.0.0-bin-hadoop2.6/python/lib/py4j-0.10.1-src.zip",
"PYTHONSTARTUP": "/home/ctsats/spark-2.0.0-bin-hadoop2.6/python/pyspark/shell.py",
"PYSPARK_PYTHON": "/opt/intel/intelpython27/bin/python2"
}
}
я не потрудился изменить свои данные на /my/path/to
etc., и вы уже можете видеть, что есть некоторые различия между нашими случаями (я использую Intel Python 2.7, а не Anaconda Python 3), но, надеюсь, вы получите идею (кстати, не беспокойтесь о connection_file
- я тоже не использую).
теперь самый простой способ для вас-вручную внести необходимые изменения (только пути) в мой выше показано ядро и сохраните его в новой подпапке