在 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)的并行处理?