java.lang.ClassNotFoundException: com.johnsnowlabs.nlp.DocumentAssembler spark in Pycharm with 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 的新手,有人可以帮忙吗?

解决方法

先了解一些上下文。 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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...