从具有数亿行的文件构建TSV

时间:2014-06-20 20:11:29

标签: ruby tsv

我有一个应用程序需要从一个有几亿行的数据文件中构建一个tsv文件。

现在我构建tsv文件的代码看起来像这样:

File.open(data, 'rb').each { |line|
        row = to_tsv_row(line)) # this formats the row to be delimited by a tab
        open(tsv_path, "a+") { |f| f << row }
      }

这似乎是构建tsv文件的一种相当慢的方式(可能效率低下)。那里有一个可以快速有效地完成这项工作的图书馆吗?

1 个答案:

答案 0 :(得分:0)

您可以使用Ruby的CSV库:

require 'csv'
CSV.open(tsv_path, 'w', col_sep: "\t") do |tsv|
  File.open(data, 'rb').each do |line|
    row = to_row(line) # this only needs to convert line to an array of Objects responding to to_s
    tsv << row
  end
end

在我的系统上花费大约10秒来完成一百万行,但我认为这在很大程度上取决于您的数据和硬件。一个拥有一亿行的TSV首先听起来像个坏主意。