在 PySpark 并行执行上下文中使用 JAR 依赖项

Posted

技术标签:

【中文标题】在 PySpark 并行执行上下文中使用 JAR 依赖项【英文标题】:Using a JAR dependency in a PySpark parallelized execution context 【发布时间】:2019-04-01 18:32:25 【问题描述】:

这是针对 PySpark / Databricks 项目的:

我编写了一个 Scala JAR 库,并通过一个简单的 Python 包装器将其函数公开为 UDF;在我的 PySpark 笔记本中一切正常。但是,当我尝试在 sc.parallelize(..).foreach(..) 环境中使用从 JAR 导入的任何函数时,执行会因以下错误而终止:

TypeError: 'JavaPackage' object is not callable

在包装器的这一行:

jc = get_spark()._jvm.com.company.package.class.get_udf(function.__name__)

我怀疑 JAR 库在并行上下文中不可用,因为如果我将库路径替换为一些乱码,错误仍然完全相同。

到目前为止,我无法在 Spark 文档中找到必要的线索。使用 sc.addFile("dbfs:/FileStore/path-to-library.jar") 没有帮助。

【问题讨论】:

【参考方案1】:

您可以尝试在 PYSPARK_SUBMIT_ARGS 环境变量中添加 JAR(在 Spark 2.3 之前,SPARK_CLASSPATH 也可以这样做)。

例如:

os.environ['PYSPARK_SUBMIT_ARGS'] = '--jars <path/to/jar> pyspark-shell'

【讨论】:

以上是关于在 PySpark 并行执行上下文中使用 JAR 依赖项的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PySpark 在桌面本地文件夹的目录中执行文件(pdf、docs、txt、xls)的并行处理?

具有多个接收器的 pyspark 并行处理

Jupyter Notebook 中的 PySpark 配置

在工作节点上并行排序 PySpark 数据帧

使用 async/await 并行执行任务继续

如何使用 PySpark 并行化我的文件处理程序