0
私はamazon s3で膨大なcsvファイル(100MB +)を持っていて、それらをチャンクで読み込み、ルビーCSVライブラリを使用して処理します。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がある:私はハードのcsv処理のための右のIOオブジェクトを作成する時間を持っています。私はStringIOでファイル全体をメモリにロードしたくありません。これを行うには、rubyにbufferedioまたはringbufferがありますか? 誰かがスレッド(プロセスなし)とパイプを使って良い解決策を持っていれば、私はそれを見たいと思っています。