问题描述
我有一个在 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 会话,但不更改任何其他设置?
解决方法
所以,这是一个的答案,但不是我想要的。
要将那个类添加到类路径中,我可以用这个开始我的工作:
%%configure -f
{
"jars": [
"{some_path_to_s3}/jpmml-sparkml-executable-1.5.13.jar"
]
}
这造成了我上面提到的问题,我无法sc.install_pypi_package
。但是,我可以以更手动的方式添加该包。第一步是使用项目 github 中的 zip(在本例中,只是 pyspark2pmml
目录,而不是整个 zip)创建仅包含所需模块的 zip 文件。然后可以使用 sc.addPyFile
sc.addPyFile('{some_path_to_s3}/pyspark2pmml.zip')
此后,我可以完全按照预期运行原始命令。