gpt4 book ai didi

ruby - 在 Ruby 中处理大型 CSV 文件

转载 作者:数据小太阳 更新时间:2023-10-29 07:49:42 24 4
gpt4 key购买 nike

我想解析 MaxMind GeoIP2 数据库的两个 CSV 文件,根据一列进行一些连接并将结果合并到一个输出文件中。

我使用标准的 CSV ruby​​ 库,它很慢。我认为它会尝试将所有文​​件加载到内存中。

block_file = File.read(block_path)
block_csv = CSV.parse(block_file, :headers => true)
location_file = File.read(location_path)
location_csv = CSV.parse(location_file, :headers => true)


CSV.open(output_path, "wb",
:write_headers=> true,
:headers => ["geoname_id","Y","Z"] ) do |csv|


block_csv.each do |block_row|
puts "#{block_row['geoname_id']}"

location_csv.each do |location_row|
if (block_row['geoname_id'] === location_row['geoname_id'])
puts " match :"
csv << [block_row['geoname_id'],block_row['Y'],block_row['Z']]
break location_row
end
end

end

是否有另一个支持在 chunks 中处理的 ruby​​ 库?

block_csv 为 800MB,location_csv 为 100MB。

最佳答案

只需使用 CSV.open(block_path, 'r', :headers => true).each do |line| 而不是 File.read CSV.解析。它将逐行解析文件。

在您当前的版本中,您明确告诉它使用 File.read 读取所有文件,然后使用 CSV.parse 将整个文件解析为字符串。所以它完全按照您所说的去做。

关于ruby - 在 Ruby 中处理大型 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29730401/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com