Amazon s3 に巨大な csv ファイル (100MB+) があり、それらをチャンクで読み取り、ruby CSV ライブラリを使用して処理したいと考えています。csv 処理用の適切な IO オブジェクトを作成するのに苦労しています:
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 はありますか? スレッド (プロセスなし) とパイプを使用した優れたソリューションがあれば、ぜひご覧ください。