0
我在亞馬遜S3上有巨大的csv文件(100MB +),我想用塊讀取它們並使用ruby CSV庫處理它們。我有一個很難創建CSV處理正確的IO對象:Ruby中的緩衝/ RingBuffer IO + Amazon S3非阻塞區塊讀取
buffer = TheRightIOClass.new
bytes_received = 0
RightAws::S3Interface.new(<access_key>, <access_secret>).retrieve_object(bucket, key) do |chunk|
bytes_received += buffer.write(chunk)
if bytes_received >= 1*MEGABYTE
bytes_received = 0
csv(buffer).each do |row|
process_csv_record(row)
end
end
end
def csv(io)
@csv ||= CSV.new(io, headers: true)
end
我不知道這裏的正確設置應該是什麼和什麼TheRightIOClass是。我不想用StringIO將整個文件加載到內存中。在ruby中是否有bufferedio或ringbuffer來執行此操作? 如果有人使用線程(無進程)和管道有一個很好的解決方案,我很想看到它。