Apache spark Spark nlp:can';在pyspark中加载预训练的从磁盘识别实体模型

Apache spark Spark nlp:can';在pyspark中加载预训练的从磁盘识别实体模型,apache-spark,kubernetes,pyspark,johnsnowlabs-spark-nlp,Apache Spark,Kubernetes,Pyspark,Johnsnowlabs Spark Nlp,我已经建立了spark群集,并希望集成spark nlp以运行命名实体识别。我需要从磁盘访问模型,而不是在运行时从internet下载。我已经从模型下载页面下载了recognize\u entities\u dl模型,并将解压后的文件放在spark可以访问的位置。当我运行以下代码时: ner = NerDLModel.pretrained('/path/to/unzipped/files') 我看到找不到要下载的模型,请检查名称消息,指示在代码中找不到文件,后面是堆栈跟踪。我还尝试了Pretr

我已经建立了spark群集,并希望集成spark nlp以运行命名实体识别。我需要从磁盘访问模型,而不是在运行时从internet下载。我已经从模型下载页面下载了
recognize\u entities\u dl
模型,并将解压后的文件放在spark可以访问的位置。当我运行以下代码时:

ner = NerDLModel.pretrained('/path/to/unzipped/files')
我看到
找不到要下载的模型,请检查名称消息,指示在代码中找不到文件,后面是堆栈跟踪。我还尝试了
PretrainedPipeline
类,得到了类似的结果

关于其价值的几个重要细节:

spark版本:2.4.4

sparknlp版本:2.3.3

Spark在kubernetes吊舱内的docker容器中运行。我可以执行到这个容器中并手动运行命令来重现问题。看起来像是
\u internal.\u GetResourceSize
返回-1,导致加载程序退出。我还收到了一些关于http的警告,但我只是想访问一个本地文件,所以不确定这与什么有关:

>>> _internal._GetResourceSize('/path/in/container/recognize_entities_dl_en_2.1.0_2.4_1562946909722', 'en', remote_loc=None).apply()
19/12/02 20:29:03 WARN ApacheUtils: NoSuchMethodError was thrown when disabling normalizeUri. This indicates you are using an old version (< 4.5.8) of Apache http client. It is recommended to use http client version >= 4.5.9 to avoid the breaking change introduced in apache client 4.5.7 and the latency in exception handling. See https://github.com/aws/aws-sdk-java/issues/1919 for more information
19/12/02 20:29:03 WARN ApacheUtils: NoSuchMethodError was thrown when disabling normalizeUri. This indicates you are using an old version (< 4.5.8) of Apache http client. It is recommended to use http client version >= 4.5.9 to avoid the breaking change introduced in apache client 4.5.7 and the latency in exception handling. See https://github.com/aws/aws-sdk-java/issues/1919 for more information
'-1'
>>>
>>>>内部。获取资源大小('/path/in/container/recognize_entities_dl_en_2.1.0_2.4_156294; 6909722','en',remote_loc=None)。应用()
19/12/02 20:29:03警告ApacheUtils:禁用normalizeUri时引发NoSuchMethodError。这表示您正在使用Apache http客户端的旧版本(<4.5.8)。建议使用http客户端版本>=4.5.9,以避免apache客户端4.5.7中引入的破坏性更改和异常处理中的延迟。看见https://github.com/aws/aws-sdk-java/issues/1919 更多信息
19/12/02 20:29:03警告ApacheUtils:禁用normalizeUri时引发NoSuchMethodError。这表示您正在使用Apache http客户端的旧版本(<4.5.8)。建议使用http客户端版本>=4.5.9,以避免apache客户端4.5.7中引入的破坏性更改和异常处理中的延迟。看见https://github.com/aws/aws-sdk-java/issues/1919 更多信息
'-1'
>>>

您试图在注释器中加载预先训练好的管道。有两种类型的预培训资源:模型和管道。预训练的模型可以加载到注释器中,注释器稍后将在管道中使用,但是,预训练的管道可以很容易地加载并在之后使用

  • 预先培训的管道示例(在线需要互联网):
导入com.johnsnowlabs.nlp.pretrained.pretrained管道
导入com.johnsnowlabs.nlp.SparkNLP
SparkNLP.version()
val testData=spark.createDataFrame(Seq(
(1,“谷歌已宣布发布流行的TensorFlow机器学习库的测试版”),
(2,“唐纳德·约翰·特朗普(1946年6月14日出生)是美国第45任现任总统”)
)).toDF(“id”、“文本”)
//请注意,对于加载预训练管道,我们使用预训练管道
val管道=预培训管道(“识别实体”,lang=“en”)
val注释=pipeline.transform(testData)
annotation.show()
/*
导入com.johnsnowlabs.nlp.pretrained.pretrained管道
导入com.johnsnowlabs.nlp.SparkNLP
2.4.0
testData:org.apache.spark.sql.DataFrame=[id:int,text:string]
管道:com.johnsnowlabs.nlp.pretrained.PretrainedPipeline=PretrainedPipeline(实体识别器、公共/模型)
注释:org.apache.spark.sql.DataFrame=[id:int,text:string…还有6个字段]
+---+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+
|id |文本|文档|句子|标记|嵌入| ner |实体|
+---+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+
|1 |谷歌已经发布了一个公告…|[[document,0,10…|[[document,0,10…|[[token,0,5,Go…|[[word|u embeddings…|[[named|u entity,0…|[[chunk,0,5,Go]|
|唐纳德·约翰·特朗普|
+---+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+
*/
annotation.select(“entities.result”).show(false)
/*
+----------------------------------+
|结果|
+----------------------------------+
|[谷歌,TensorFlow]|
|[唐纳德·约翰·特朗普,美国]|
+----------------------------------+
*/
  • 预先训练的管道示例(脱机加载保存的管道):
导入com.johnsnowlabs.nlp.pretrained.pretrained管道
导入com.johnsnowlabs.nlp.SparkNLP
SparkNLP.version()
val testData=spark.createDataFrame(Seq(
(1,“谷歌已宣布发布流行的TensorFlow机器学习库的测试版”),
(2,“唐纳德·约翰·特朗普(1946年6月14日出生)是美国第45任现任总统”)
)).toDF(“id”、“文本”)
//在这里,我们正在加载一个经过预培训的管道,我们已经手动下载以供脱机使用
val pipeline=PretrainedPipeline.load(“/path/in/container/recognize_entities_dl_en_2.1.0_2.4_15629496909722”)
val注释=pipeline.transform(testData)
annotation.show()
/*
导入com.johnsnowlabs.nlp.pretrained.pretrained管道
导入com.johnsnowlabs.nlp.SparkNLP
2.4.0
testData:org.apache.spark.sql.DataFrame=[id:int,text:string]
管道:com.johnsnowlabs.nlp.pretrained.PretrainedPipeline=PretrainedPipeline(实体识别器、公共/模型)
注释:org.apache.spark.sql.DataFrame=[id:int,text:string…还有6个字段]
+---+--------------------+--------------------+--------------------+----------