在jupyter笔记本中添加自定义jar到pyspark

DDW*_*DDW 12 python-3.x apache-kafka spark-streaming pyspark jupyter-notebook

我正在使用带有PysparkJupyter笔记本以及以下码头图片:Jupyter all-spark-notebook

现在我想编写一个使用Kafka消息pyspark流应用程序.在Spark-Kafka集成指南中,他们描述了如何使用spark-submit部署这样的应用程序(它需要链接外部jar - 解释在3.部署中).但是因为我正在使用Jupyter笔记本,所以我从未真正运行过spark-submit命令,我认为如果按下执行,它会在后面运行.

spark-submit命令中你可以指定一些参数,其中一个是-jars,但我不清楚如何从笔记本中设置这个参数(或通过环境变量外部?).我假设我可以通过SparkConfSparkContext对象动态链接这个外部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中执行此操作的示例,请参见此处


Nan*_*Rao 8

事实上,当您创建 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)