在每个map()执行上加载库

时间:2018-03-02 00:31:30

标签: python apache-spark pyspark spacy

在执行程序(spaCy)之间共享时,名为problem with pickling的库存在一些问题。其中一个解决方法是在每个地图执行时独立导入它,但负载需要一段时间。

我是Spark的新手,所以我不明白map背后的确切机制是什么。在下面的示例中会发生什么?

我害怕最糟糕的情况,即单独处理单独的文本行,并且每个文本行将导入spacy。新鲜的导入可能需要10多天,我们有1,000,000多行文本。

class SpacyMagic(object):
    _spacys = {}

    @classmethod
    def get(cls, lang):
        if lang not in cls._spacys:
            import spacy
            cls._spacys[lang] = spacy.load(lang)
        return cls._spacys[lang]


def run_spacy(sent):
    nlp = SpacyMagic.get('en')
    return [wrd.text for wrd in nlp(sent)]

sc = SparkContext(appName="LineTokenizer")
data = sc.textFile(s3in)
res = data.map(process_line)
print res.take(100)
sc.stop()

0 个答案:

没有答案