在 jupyter notebook 中将自定义 jar 添加到 pyspark

新手上路,请多包涵

我正在使用 带有 Pyspark 的 Jupyter 笔记本和 以下 docker 图像Jupyter all-spark-notebook

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

spark-submit 命令中,您可以指定一些参数,其中之一是 -jars ,但我不清楚如何从笔记本(或通过环境变量从外部设置此参数?)。我假设我可以通过 SparkConfSparkContext 对象动态链接这个外部 jar。有没有人有过如何从笔记本正确执行链接的经验?

原文由 DDW 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 987
2 个回答

我已经设法让它在从 all-spark 容器运行的 jupyter notebook 中运行。

我在 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-shell!

扩展: 如果你想包含来自 spark-packages 的代码,你可以使用 –packages 标志。可以在 此处 找到有关如何在 all-spark-notebook 中执行此操作的示例

原文由 DDW 发布,翻译遵循 CC BY-SA 3.0 许可协议

事实上,有一种方法可以在您创建 SparkSession 时通过 SparkConf 对象动态链接它,如 本答案 中所述:

 spark = SparkSession \
    .builder \
    .appName("My App") \
    .config("spark.jars", "/path/to/jar.jar,/path/to/another/jar.jar") \
    .getOrCreate()

原文由 Nandan Rao 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进