Использовать более умный 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) закрыть выходной файл - есть вуаля!

Другие вопросы по тегам