Добавление пользовательских банках в pyspark в jupyter notebook

Я использую ноутбук Jupyter с Pyspark со следующим изображением докеры: Jupyter all-spark -notebook

Теперь я хотел бы написать приложение pyspark streaming, которое потребляет сообщения от Kafka. В руководстве Руководство по интеграции Spark-Kafka описывается, как развернуть такое приложение с помощью spark-submit (требуется привязка внешнего баннера - объяснение в 3. Развертывание). Но поскольку я использую ноутбук Jupyter, я никогда не запускаю команду spark-submit, я предполагаю, что он будет запущен в спину, если я нажму кнопку execute.

В команде spark-submit вы можете указать некоторые параметры, один из которых - -jars, но мне непонятно, как я могу установить этот параметр из ноутбука (или извне через переменные среды?). Я предполагаю, что могу связать эту внешнюю банку динамически с помощью объекта SparkConf или SparkContext. Кто-нибудь знает, как правильно выполнить привязку из ноутбука?

Ответ 1

Мне удалось заставить его работать из ноутбука jupyter, который работает из контейнера с полной искрой.

Я запускаю python3-ноутбук в jupyterhub и перезаписываю флаг PYSPARK_SUBMIT_ARGS, как показано ниже. Потребительская библиотека Kafka была загружена из репозитория maven и помещена в мой домашний каталог /home/jovyan:

import os
os.environ['PYSPARK_SUBMIT_ARGS'] = 
  '--jars /home/jovyan/spark-streaming-kafka-assembly_2.10-1.6.1.jar pyspark-shell'

import pyspark
from pyspark.streaming.kafka import KafkaUtils
from pyspark.streaming import StreamingContext

sc = pyspark.SparkContext()
ssc = StreamingContext(sc,1)

broker = "<my_broker_ip>"
directKafkaStream = KafkaUtils.createDirectStream(ssc, ["test1"],
                        {"metadata.broker.list": broker})
directKafkaStream.pprint()
ssc.start()

Примечание: Не забывайте, что pyspark-shell в переменных среды!

Расширение: Если вы хотите включить код из искровых пакетов, вы можете вместо этого использовать флаг -пакеты. Пример того, как это сделать в полностью искровой блокноте, можно найти здесь

Ответ 2

Вы можете запустить свой jupyter-ноутбук с помощью команды pyspark, установив соответствующие переменные среды:

export PYSPARK_DRIVER_PYTHON=jupyter
export IPYTHON=1
export PYSPARK_DRIVER_PYTHON_OPTS="notebook --port=XXX --ip=YYY"

а XXX - это порт, который вы хотите использовать для доступа к ноутбуку, а YYY - IP-адрес.

Теперь просто запустите pyspark и добавьте --jars в качестве переключателя так же, как вы бы запустили submit

Ответ 3

для работы на jupyter-notebook с искрой необходимо указать местоположение внешних jar файлов перед созданием объекта sparkContext. pyspark --jars youJar создаст спаркконтекст с расположением внешних банок