Python - PySpark 的 Pickle Spacy

标签 python apache-spark pyspark user-defined-functions

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/

相关文章:

python - lambda 函数中的 undefined variable

apache-spark - 如何在 jupyter notebook 中将 spark 数据帧写入 avro 文件格式?

apache-spark - 优雅地关闭 Spark 结构化流

Python 在集合构造过程中自动将 float 简化为整数

python - 在满足x个条件后播放音频(Python-Pygame)

python - 如何使用正则表达式在字符串中查找具有特定规则的子字符串?

java - Intellij 中的故障排除 "UNRESOLVED DEPENDENCIES"

apache-spark - Hive unix_timestamp 在源列中的毫秒数不起作用

apache-spark - Pyspark 如何从 word2vec 词嵌入计算 Doc2Vec?

python - 不能将 line_profiler 与 Cython 一起使用