今回は【Red Data Tools開発者に聞け!】第13回目の振り返り記事になります!今回のお話はこれから追加していく新機能のイメージのおさらいになります。
今回やったこと
- これから追加する機能のおさらい
これから追加する機能のおさらい
Apache Arrow の Arrow::Table
には既に行単位で ruby の配列を生成してリターンする raw_records
という関数が実装されています。
以下の実行結果に示すように、表形式のデータを2次元の配列にして返します。
irb(main):006:0> Arrow::Table.new({ number1: [1, 2, 3], number2: [10, 20, 30] })
=>
#<Arrow::Table:0x10fdfcbd0 ptr=0x600002304dc0>
number1 number2
0 1 10
1 2 20
2 3 30
irb(main):007:0> Arrow::Table.new({ number1: [1, 2, 3], number2: [10, 20, 30] }).raw_records
=> [[1, 10], [2, 20], [3, 30]]
しかし raw_records
は全てのレコードが配列に変換されるまで結果を受け取ることができません。もし「結果を加工しながら配列に変換する」などといった処理を書きたい場合は、全てを配列に変換したのち、再びループを回して加工する、といった二度手間を踏むことになってしまいます。
もし、ruby の each
メソッドのように結果を一行ずつ受け取って処理することができればこの問題は解決することができます。
実際に実現したいことを ruby で書いてみると以下のようなイメージですね。
class Arrow::Table
def each_raw_record
raw_records.each do |row|
yield row
end
end
end
Arrow::Table.new(number: [1, 2, 3], number2: [10, 20, 30]).each_raw_record { |row| p row }
[1, 10]
[2, 20]
[3, 30]
追加した each_raw_record
では結果を一行ずつイテレートして yield
しています。このサンプルコードではブロックとして結果を標準出力する処理を渡していますので、コンソールに受け取った配列の内容が出力されています。
次回からは実際に C++ の方にこの機能を実装していきます!
引き続きウォッチしてみてくださいね!
コメント