Python中文
首页
教程
问答
标签
搜索
登录
注册
如何同时计算一个大文件中的词频?
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我需要计算一个3gbgzip压缩的英语句子纯文本文件的词频,解压缩时大约是30gb。在</p> <p>我有一个带有<code>collections.Counter</code>和<code>gzip.open</code>的单线程脚本,需要几个小时才能完成。在</p> <p>因为逐行读取文件比拆分和计数快得多,所以我考虑一个producer-consumer流,其中一个文件读取器生成行,几个消费者执行拆分和计数,最后,合并<code>Counter</code>s以获得单词的出现。在</p> <p>但是,我找不到<code>ProcessPoolExecutor</code>向<code>Executor</code>发送队列的示例,它们只是<code>map</code>列表中的单个项目。 只有<code>asyncio.Queue</code>的单线程示例。在</p> <ul> <li><p>它是一个巨大的文件,所以我不能在计数之前读取整个文件并得到<code>list</code>,因此我不能使用<code>concurrent.futures.Executor.map</code>。但我读到的所有例子都是以一个固定的列表作为开始。</p></li> <li><p>拆分和计算一个句子的时间相当于fork a process,所以我必须使每个消费过程的寿命更长。我不认为<code>map</code>可以合并<code>Counter</code>,因此我不能使用<code>chunksize</code>>;1。因此,我必须给消费者一个队列,让他们继续计数,直到整个文件完成。但大多数示例只向消费者发送一个项目,并使用<code>chunksize=1000</code>来减少<code>fork</code>次。</p></li> </ul> <p>你能给我写个例子吗?在</p> <p>py与py3.3向后兼容的速度更快。在</p> <hr/> <p>我的实际情况是更具体的文件格式:</p> <pre><code>chr1 10011 141 0 157 4 41 50 chr1 10012 146 1 158 4 42 51 chr1 10013 150 0 163 4 43 53 chr1 10014 164 3 167 4 44 54 </code></pre> <p>我需要计算第3列到第8列的每个柱状图。 所以我把词频作为一个简单的例子。在</p> <p>我的代码是:</p> ^{pr2}$ <p><code>csv.DictReader</code>花费的时间最多。在</p> <p><a href="https://i.stack.imgur.com/SVqhO.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/SVqhO.png" alt="cProfile"/></a></p> <hr/> <p>我的问题是,虽然gzip阅读器很快,csv阅读器很快,但我需要数到几十亿行。而且csv阅读器肯定比gzip阅读器慢。在</p> <p>因此,我需要将行扩展到csv阅读器的不同工作进程,并分别进行下游计数。在一个生产者和许多消费者之间使用队列是很方便的。在</p> <p>由于我使用的是Python而不是C,是否有一些抽象的包装器用于多处理和队列?是否可以将<code>ProcessPoolExecutor</code>与<code>Queue</code>类一起使用?在</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>一个30gb的文本文件足够大,可以把你的问题放到大数据领域。所以为了解决这个问题,我建议使用像Hadoop和Spark这样的大数据工具。您所解释的“生产者-消费者流”基本上就是<strong><code>MapReduce</code></strong>算法的设计目的。单词计数频率是一个典型的MapReduce问题。查一下,你会发现很多例子。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
尝试将单元格与pythondocx合并
9 回答
尝试将卡的5个值传递给函数,但不起作用
3 回答
尝试将卷绑定到docker容器
5 回答
尝试将原始queryset转换为queryset时出错
3 回答
尝试将原始输入与函数一起使用
10 回答
尝试将参数传递给函数时,可以通过python中的“@app.route”
6 回答
尝试将变量mid脚本返回到我的模板
1 回答
尝试将变量从一个函数调用到另一个函数
1 回答
尝试将变量传递给一个名称与参数不同的函数是否更好?
9 回答
尝试将变量传递给函数内部的函数。Python
1 回答
尝试将变量作为参数传递
3 回答
尝试将变量作为命令
6 回答
尝试将变量旁边的数据从文本复制到csv时,python获取错误:
2 回答
尝试将变量输入到sql数据库中已创建的行中
1 回答
尝试将只有两个或更多重复元音的单词打印到文本文件中
2 回答
尝试将后缀(字符串)添加到列表中每个WebElement的末尾
9 回答
尝试将命令行输出保存到fi时出错
3 回答
尝试将唯一ASCII文件导入数据帧时出现分析错误
6 回答
尝试将回归程序从stata转换为python
5 回答
尝试将图像上的点投影到二维平面时打开CV通道
2 回答