如何在Spylon Kernel环境的Spark中安装外部第三方包
Spylon Kernel 安装Spark外部依赖包可行方案
Spylon Kernel的Spark配置仅在Kernel启动初始化阶段生效,一旦SparkContext完成初始化,后续所有修改配置、手动启动spark-shell的操作都不会作用到当前Kernel绑定的Spark实例,这是之前操作失效的核心原因。
方法1:使用%%init_spark魔法命令(推荐,支持spark-packages源依赖)
该命令必须放在Notebook的第一个执行Cell,Cell前面不能存在任何Spark相关代码,否则配置不会被加载。
配置示例:
%%init_spark // 按实际集群环境替换master地址 launcher.master = "local[*]" // 填写需要安装的依赖坐标,多个依赖按数组格式追加即可,支持spark-packages平台的所有包 launcher.packages = ["graphframes:graphframes:0.8.3-spark3.4-s_2.12", "com.databricks:spark-xml_2.12:0.16.0"] // 显式添加spark-packages源,避免依赖拉取失败 launcher.repositories = ["https://repos.spark-packages.org/"]
执行完该配置Cell后,再编写业务Spark代码即可,依赖会在Spark启动时自动拉取加载,不会额外创建独立Spark实例。
如果之前已经运行过其他代码导致SparkContext提前初始化,先重启Kernel,单独执行上述配置Cell后再运行后续代码。
方法2:修改全局配置(固定常用依赖)
如果需要在所有Spylon Kernel中默认加载固定依赖,可以直接修改Spylon全局配置,不用每次在Notebook中编写初始化脚本:
- 找到Spylon配置文件,默认路径为
~/.spylon/kernel.json - 在配置的
launcher字段下,添加和上述魔法命令参数一致的packages、repositories配置项 - 保存配置后重启所有运行中的Spylon Kernel,新启动的实例会自动加载预设的依赖
此前操作失效的具体原因
- 手动调用带
--packages参数的spark-shell:Spylon本身会维护和当前Notebook绑定的独立SparkContext进程,手动执行spark-shell命令会启动一个和当前Kernel完全隔离的新Spark进程,安装的包无法在当前Notebook环境中调用 - 调用
%%init_spark配置未生效:绝大多数情况是该命令没有在第一个Cell执行,执行前Kernel已经完成SparkContext初始化,配置不支持热加载。
内容的提问来源于stack exchange,提问作者João Paulo Andrade
相关产品推荐
相关产品推荐

