documentation for Spacy 2.0提到开发人员已经添加了允许对 Spacy 进行 pickle 的功能,以便它可以被 PySpark 接口(interface)的 Spark Cluster 使用,但是,他们没有给出如何执行此操作的说明。
有人可以解释我如何挑选 Spacy 的英语 NE 解析器以在我的 udf 函数中使用吗?
这行不通:
from pyspark import cloudpickle
nlp = English()
pickled_nlp = cloudpickle.dumps(nlp)
最佳答案
不是真正的答案,而是我发现的最佳解决方法:
from pyspark.sql.functions import udf
from pyspark.sql.types import StringType, ArrayType
import spacy
def get_entities_udf():
def get_entities(text):
global nlp
try:
doc = nlp(unicode(text))
except:
nlp = spacy.load('en')
doc = nlp(unicode(text))
return [t.label_ for t in doc.ents]
res_udf = udf(get_entities, StringType(ArrayType()))
return res_udf
documents_df = documents_df.withColumn('entities', get_entities_udf()('text'))
关于Python - PySpark 的 Pickle Spacy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50880303/