Использовать более умный CSV Gem и обрабатывать CSV в чанках - мне нужно удалить строки из большого CSV ( 2 ГБ), сравнивая ключ / значения с другим CSV (1 ГБ)
Ниже приведен код, который я использовал. Я не могу удалить строки из Main.csv, когда значение col "name" в Main.csv равно значению col "name" в Sub.csv. Пожалуйста, помогите мне в том же. Я знаю, что что-то упустил. Заранее спасибо.
require 'rubygems'
require 'smarter_csv'
main_csv = SmarterCSV.process('Main.csv', {:chunk_size => 100}) do |chunk|
short_csv = SmarterCSV.process('Sub.csv', {:chunk_size => 100}) do |smaller_chunk|
chunk.each do |each_ch|
smaller_chunk.each do |small_each_ch|
each_ch.delete_if{|k,v| v == small_each_ch[:name]}
end
end
end
конец
1 ответ
Это немного нестандартный сценарий для smarter_csv
..
Sub.csv имеет 2000 строк. тогда как Main.csv имеет около 1 миллиона строк.
Если все, что вам нужно решить, это если name
появляется в обоих файлах, то вы можете сделать это:
1) сначала прочитайте файл Sub.csv и просто сохраните значения name
в массиве sub_names
2) открыть выходной файл для файла result.csv
3) прочитать файл Main.csv, с обработкой кусками, и записать данные для каждой строки в файл result.csv, если имя не появляется в массиве sub_names
4) закрыть выходной файл - есть вуаля!