Python并发框架中flatMap的等价物

2024-09-30 10:29:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一段代码如下:

for x in range(10):
    for v in f(x):
        print(v)

我想将它并行化,所以我可能会这样做

ex = ProcessPollExecutor()
for vs in ex.map(f, range(10)):
    for v in vs:
        print(v)

但是,f是一个生成器,因此上面的代码实际上不起作用。 我可以更改f以返回列表,但此列表太大,无法放入内存

理想情况下,我希望pyspark中有类似flatMap的东西。 但是直接使用pyspark就像sc.parallelize(range(10)).flatMap(f).toLocalIterator() 似乎不起作用。至少我不能让它在初始列表如此短的情况下使用多个处理器。 (我在Why is this simple Spark program not utlizing multiple cores?中尝试了所有的东西,但没有成功。)

我可能可以自己使用队列来运行一些东西,但我想知道是否有一种在Python并发框架中并行这些代码的方法


Tags: 内存代码inmap列表for情况range
1条回答
网友
1楼 · 发布于 2024-09-30 10:29:50

最后,我用multiprocessing:PyStreams编写了自己的小型库

它通过缓冲提供了相当高效的flapmap支持,并支持其他类似Spark的功能,如:

>>> sentences = ["a word is a word", "all words are words"]
>>> (Stream(sentences)
...           .flatmap(lambda sentence: sentence.split())
...           .chunk_by_key(lambda x: hash(x) % 10)
...           .reduce_once(lambda chunk: len(set(chunk)))
...           .sum())
6

相关问题 更多 >

    热门问题