とりあえず最低限の流れが知りたかったので、int32 だけの簡単なデータでやってみました。
require "arrow" # -------------------------------- # 列1 のデータを用意 builder = Arrow::Int32ArrayBuilder.new builder.append(1) builder.append(2) array1 = builder.finish p array1 # #<Arrow::Int32Array:0x557fac799a88 ptr=0x557fac442e80 [ # 1, # 2 # ]> # -------------------------------- # 列2 のデータを用意 # Arrow::XxxArray.new を使うと簡単 array2 = Arrow::Int32Array.new([11, 12]) p array2 # #<Arrow::Int32Array:0x557fac798ed0 ptr=0x557fac442fa0 [ # 11, # 12 # ]> # -------------------------------- col1_f = Arrow::Field.new("col1", :int32) # フィールド名、型 col2_f = Arrow::Field.new("col2", :int32) fields = [col1_f, col2_f] schema = Arrow::Schema.new(fields) # -------------------------------- record_batch = Arrow::RecordBatch.new( schema, 2, # 件数 [array1, array2] ) p record_batch # #<Arrow::RecordBatch:0x557fac791720 ptr=0x557fac6c86b0 col1: [ # 1, # 2 # ] # col2: [ # 11, # 12 # ] # > # -------------------------------- # Arrow::Table に変換 table = record_batch.to_table p table # #<Arrow::Table:0x557fac790618 ptr=0x557fac6c87a0> # col1 col2 # 0 1 11 # 1 2 12
バージョン: Ruby 2.7.1 red-arrow 1.0.0
参考
- (2017-02-11) Apache ArrowのRubyバインディングをGObject Introspectionで - Kouhei Sutou - Rabbit Slide Show
- p42〜47 array の作りかた
- Apache Arrow GLib Reference Manual: Apache Arrow GLib Reference Manual
- C/GLib 版のリファレンス
- Tabular Data — Apache Arrow v1.0.0
- C++ 版のドキュメント