私はPysparkを備えたJupyterノートブックを次のように使用していますdocker image: Jupyter all-spark-notebook
ここで、Kafkaからのメッセージを消費するpysparkストリーミングアプリケーションを作成したいと思います。 Spark-Kafka統合ガイド では、spark-submitを使用してそのようなアプリケーションをデプロイする方法について説明しています(外部jarをリンクする必要があります-説明は3にあります。デプロイ)。しかし、私はJupyter Notebookを使用しているので、実際にspark-submit
コマンドを実行することはないので、実行を押すと後ろで実行されると思います。
spark-submit
コマンドでは、いくつかのパラメーターを指定できます。そのうちの1つは-jars
ですが、ノートブックから(または環境変数を介して外部から)このパラメーターを設定する方法がわかりません。この外部jarをSparkConf
またはSparkContext
オブジェクトを介して動的にリンクできると想定しています。ノートブックから適切にリンクを実行する方法を経験した人はいますか?
All-sparkコンテナから実行されているjupyterノートブック内からそれを機能させることができました。
以下に示すように、jupyterhubでpython3ノートブックを起動し、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を忘れないでください-環境変数のシェル!
Extension:spark-packagesからのコードを含める場合は、代わりに--packagesフラグを使用できます。 all-spark-notebookでこれを行う方法の例は、次のとおりです ここ
関連する環境変数を設定することにより、pysparkコマンドを使用してjupyterノートブックを実行できます。
export PYSPARK_DRIVER_PYTHON=jupyter
export IPYTHON=1
export PYSPARK_DRIVER_PYTHON_OPTS="notebook --port=XXX --ip=YYY"
xXXはノートブックへのアクセスに使用するポートで、YYYはIPアドレスです。
spark submitと同じように、pysparkを実行し、スイッチとして--jarsを追加するだけです。
sparkでjupyter-notebookを操作する場合は、sparkContextオブジェクトを作成する前に外部jarの場所を指定する必要があります。pyspark --jars youJarはsparkcontextを作成します外部jarの場所
誰かが私と同じ場合:私は上記のすべての解決策を試しましたが、どれも私にはうまくいきません。私がやろうとしているのは、Jupyterノートブックで Delta Lake を使用することです。
最後に、最初にSparkContext.addPyFile("/path/to/your/jar.jar")
を呼び出すことにより、from delta.tables import *
を使用できます。 spark公式ドキュメントでは、.Zip
または.py
ファイルの追加についてのみ言及されていますが、.jar
を試したところ、完全に機能しました。