首页 > 解决方案 > java.lang.ClassNotFoundException: com.johnsnowlabs.nlp.DocumentAssembler spark 在 Pycharm 与 conda env

问题描述

我从 spark-nlp 保存了一个预训练模型,然后我尝试在 Pycharm 中使用 anaconda env 运行 Python 脚本:

Model_path = "./xxx"
model = PipelineModel.load(Model_path)

但我收到以下错误:(我尝试使用 pyspark 2.4.4 & spark-nlp2.4.4 和 pyspark 2.4.4 & spark-nlp2.5.4)得到同样的错误:

21/02/05 13:31:21 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).

Traceback (most recent call last):
  File "C:/Users/xxxx/xxxxx.py", line 381, in <module>
    model = PipelineModel.load(Model_path)
  File "C:\Users\xxxxxxxx\anaconda3\envs\python3.7\lib\site-packages\pyspark\ml\util.py", line 362, in load
    return cls.read().load(path)
  File "C:\Users\\xxxxxxxx\anaconda3\envs\python3.7\lib\site-packages\pyspark\ml\pipeline.py", line 242, in load
    return JavaMLReader(self.cls).load(path)
  File "C:\Users\xxxxxxxx\anaconda3\envs\python3.7\lib\site-packages\pyspark\ml\util.py", line 300, in load
    java_obj = self._jread.load(path)
  File "C:\Users\xxxxxxxx\anaconda3\envs\python3.7\lib\site-packages\py4j\java_gateway.py", line 1257, in __call__
    answer, self.gateway_client, self.target_id, self.name)
  File "C:\Users\xxxxxxxx\anaconda3\envs\python3.7\lib\site-packages\pyspark\sql\utils.py", line 63, in deco
    return f(*a, **kw)
  File "C:\Users\xxxxxxxx\anaconda3\envs\python3.7\lib\site-packages\py4j\protocol.py", line 328, in get_return_value
    format(target_id, ".", name), value)
py4j.protocol.Py4JJavaError: An error occurred while calling o314.load.
: java.lang.ClassNotFoundException: com.johnsnowlabs.nlp.DocumentAssembler

我是 pyspark 和 spark-nlp 的新手,有人可以帮忙吗?

标签: javapythonapache-sparkpysparkjohnsnowlabs-spark-nlp

解决方案


首先是一些背景。spark-nlp 库依赖于需要存在于 Spark 类路径中的 jar 文件。根据您在 PySpark 中启动上下文的方式,可以通过三种方式提供此 jar。a) 当你通过解释器启动你的 Python 应用程序时,你调用 sparknlp.start() 并且 jar 将被自动下载。

b)您使用 --jars 开关将 jar 传递给 pyspark 命令。在这种情况下,您从发布页面获取 jar 并手动下载。

c) 你启动pyspark并传递--packages,这里你需要传递一个maven坐标,例如,

pyspark --packages com.johnsnowlabs.nlp:spark-nlp_2.11:2.7.5

请在此处查看文档,

https://github.com/JohnSnowLabs/spark-nlp#usage

并确保您选择了您想要的版本。


推荐阅读