Apache Arrowで行のシャッフル / Shuffles Rows in Apache Arrow Data
code:shuffled-table.rb
class ShuffledTable
def initialize(table)
@table = table
@indices = (0...n_rows).to_a.shuffle
end
def each_record
return to_enum(__method__) unless block_given?
@indices.each do |i|
yield Arrow::Record.new(@table, i)
end
end
end
if $PROGRAM_NAME == __FILE__
require "parquet"
table = Arrow::Table.load("path/to/data.parquet")
shuffled = ShuffledTable.new(table)
pp shuffled.each_record.take(3)
end
折角Arrow上に乗っていて高速アクセスできるデータをto_a.shuffleみたいにしてRubyオブジェクトにコピーしてしまうのは勿体無い、という気持ちから。