ruby - 在 ruby​​ 中处理具有多个重复项的大量数据

标签 ruby set bigdata

我有一个大文本文件,我想用 ruby​​ 脚本处理它并存储在单独的文件中。我的问题是,生成的文件将包含数亿行,其中绝大多数是重复的。我想在将它们写入磁盘之前消除重复项。

我尝试过处理它们并将这些行放入一组中以消除重复项,然后再将它们写入输出文件,但最终我耗尽了内存并且脚本崩溃了。

有没有办法在 ruby​​ 中有效地解决我的问题?

最佳答案

使用以下代码创建一个名为 uniq.rb 的文件:

require 'digest'

hashes = {}

STDIN.each do |line|
  line.chomp!
  md5 = Digest::MD5.digest(line)
  next if hashes.include?(md5)
  hashes[md5] = true
  puts line
end

然后从命令行运行它:

ruby uniq.rb < input.txt > output.txt

主要思想是,您不必将整行保存在内存中,而只需使用 16 字节 MD5 哈希值(加上 true 值)来跟踪唯一行。

关于ruby - 在 ruby​​ 中处理具有多个重复项的大量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22208174/

相关文章:

python 设置与对象集的交集

python - 为什么 spark 在我的 PC 上总是使用单核?

r - ncvar_get "cannot allocate vector of size"对于 netcdf4 子集,无论多小

mongodb - 那里有什么好的大数据演示/示例应用程序吗?

ruby - 查找和替换多个单词

algorithm - 查找代表所有集合的元素

ruby - "You don' 你的 PATH 中没有 [PATH ],gem 可执行文件将不会运行。 "while using "gem install --user-install bundler"

java - 在 Java 中,使用 add 和 contains 方法以及迭代器来求两个集合的交集

ruby - 属性值无

Ruby 嵌套 while 循环提前停止