从给定索引中读取csv文件到rails中的索引

时间:2019-02-01 20:24:57

标签: ruby-on-rails ruby csv rubygems

我有成千上万行的非常大的文件,我想将它们插入数据库,但是由于它会阻塞db并占用大量内存,因此无法同时创建或导入。所以,我想让那些从csv文件读取索引到索引的作业(例如,第一个作业读取0到1000行,其他作业读取明智地从1000到2000行),但是我认为CSV.foreach没有这种功能,我无法在job参数中发送1000行数据,并且不能在每个job中打开此文件。所以,请引导我

获取文件的路径后,我读取了总计的行(假设为100万行)并划分为1000个作业,其中每个作业中我都提供了文件路径和索引,从该位置开始读取作业。 在每个工作中

def perform(file_name, index){

    CSV.foreach(file_name, :headers => true) do |row| # want to start with index*1000 
        hash = row.to_hash
        if if i>= index*1000 + 1000
             Table.import arr_hash
             arr_hash = []
             break if i>= index*1000 + 1000
        end
        arr_hash<<Table.new(hash)
    end
    if arr_hash
      Table.import arr_hash
    end
}

1 个答案:

答案 0 :(得分:0)

您可以使用Smarter CSV

轻松完成工作
SmarterCSV.process('csv_file_path', {:col_sep => ",", :force_utf8 => true, :chunk_size => 1000}) do |chunk|
  # process your chunk here
  # assign each chunk to a Job to process 1000 rows per job
end