DDW*_*DDW 12 python-3.x apache-kafka spark-streaming pyspark jupyter-notebook
我正在使用带有Pyspark的Jupyter笔记本以及以下码头图片:Jupyter all-spark-notebook
现在我想编写一个使用Kafka消息的pyspark流应用程序.在Spark-Kafka集成指南中,他们描述了如何使用spark-submit部署这样的应用程序(它需要链接外部jar - 解释在3.部署中).但是因为我正在使用Jupyter笔记本,所以我从未真正运行过spark-submit命令,我认为如果按下执行,它会在后面运行.
在spark-submit命令中你可以指定一些参数,其中一个是-jars,但我不清楚如何从笔记本中设置这个参数(或通过环境变量外部?).我假设我可以通过SparkConf或SparkContext对象动态链接这个外部jar .有没有人体验如何从笔记本电脑正确执行链接?
DDW*_*DDW 13
我已经设法让它从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()
Run Code Online (Sandbox Code Playgroud)
注意:不要忘记环境变量中的pyspark-shell!
扩展:如果要包含spark-packages中的代码,可以使用--packages标志.有关如何在all-spark-notebook中执行此操作的示例,请参见此处
事实上,当您创建 SparkSession 时,有一种方法可以通过 SparkConf 对象动态链接它,如本答案中所述:
spark = SparkSession \
.builder \
.appName("My App") \
.config("spark.jars", "/path/to/jar.jar,/path/to/another/jar.jar") \
.getOrCreate()
Run Code Online (Sandbox Code Playgroud)