分发 Python 模块 - Spark vs Process Pools



我做了一个Python模块,可以从PDF中提取手写文本。提取有时可能非常慢(每个文件 20-30 秒(。我有大约 100,000 个 PDF(有些有很多页面(,我想对所有 PDF 进行文本提取。本质上是这样的:

fileNameList = ['file1.pdf','file2.pdf',...,'file100000.pdf']
for pdf in fileList:
    text = myModule.extractText(pdf) # Distribute this function
    # Do stuff with text

我们之前使用过一次Spark(同事,而不是我(将几百万个文件的索引从SQL DB分发到Solr中,但是在研究这个问题时,似乎Spark更多地用于并行化大型数据集,而不是分发单个任务。为此,看起来 Python 的内置"进程池"模块会更好,我可以在具有 4 个 CPU 内核的单个服务器上运行它。

我知道SO更适合具体问题,但在我走上完全错误的道路之前,我只是想要一些建议。对于我的用例,我应该坚持使用进程池的单个服务器,还是使用 Spark 将其拆分到多个服务器?

使用 Spark 是完全合理的,因为您可以通过将文件放在分布式存储上来在多个执行器之间分配文本提取任务。这样,您就可以横向扩展计算以使用 pySpark 非常高效、轻松地将结果写回去。您甚至可以使用现有的 Python 文本提取代码:

input = sc.binaryFiles("/path/to/files")
processed = input.map(lambda (filename, content): (filename, myModule.extract(content)))

随着数据量的增加或您希望增加吞吐量,您只需添加其他节点即可。

相关内容

  • 没有找到相关文章

最新更新