Ich habe riesige csv-Dateien (100 MB +) auf Amazon S3 und ich möchte sie in Chunks lesen und verarbeiten sie Ruby CSV-Bibliothek. Ich habe eine harte Zeit, um das richtige IO-Objekt für csv Verarbeitung zu erstellen:Gepufferte/RingBuffer IO in Ruby + Amazon S3 nicht blockierenden Chunk liest
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
Ich weiß nicht, was das richtige Setup hier sollte und was die TheRightIOClass ist. Ich möchte nicht die gesamte Datei mit StringIO in den Speicher laden. Gibt es dafür einen Pufferedio oder Ringpuffer in Ruby? Wenn jemand eine gute Lösung mit Threads (keine Prozesse) und Pipes hat, würde ich es gerne sehen.