首页 > 解决方案 > 如何添加到运行 PySpark 会话的类路径

问题描述

我有一个在 AWS EMR 中运行的 PySpark 笔记本。在我的具体情况下,我想用它pyspark2pmml来创建pmml我刚刚训练过的模型。但是,我收到以下错误(运行时,pyspark2pmml.PMMLBuilder但我认为这并不重要)。

JPMML-SparkML not found on classpath
Traceback (most recent call last):
  File "/tmp/1623111492721-0/lib/python3.7/site-packages/pyspark2pmml/__init__.py", line 14, in __init__
    raise RuntimeError("JPMML-SparkML not found on classpath")
RuntimeError: JPMML-SparkML not found on classpath

我知道这是因为我的 Spark 会话没有引用所需的类。我不知道如何使用该类启动 Spark 会话。我使用 找到了另一个答案%%conf -f,但这改变了其他设置,这反过来又让我无法使用sc.install_pypi_package我也需要的。

有没有一种方法可以让我使用可用的 JPMML 类启动 Spark 会话,但不更改任何其他设置?

标签: pysparkjarpmml

解决方案


所以,这是一个答案,但不是我想要的。

要将该类添加到类路径中,我可以使用以下方法开始我的工作:

%%configure -f
{
    "jars": [
        "{some_path_to_s3}/jpmml-sparkml-executable-1.5.13.jar"
    ]
}

这产生了我上面提到的问题,我没有能力sc.install_pypi_package。但是,我可以以更手动的方式添加该包。第一步是使用项目 github 中的 zip 创建一个仅包含所需模块的 zip 文件(在这种情况下,只是pyspark2pmml目录,而不是整个 zip)。然后可以使用添加该模块sc.addPyFile

sc.addPyFile('{some_path_to_s3}/pyspark2pmml.zip')

在此之后,我可以完全按照我的预期运行原始命令。


推荐阅读