⏫
Apache Arrowでフィルタリング
問題
ID | カテゴリー |
---|---|
1 | A |
2 | B |
3 | C |
4 | A |
5 | B |
6 | C |
みたいな表から、カテゴリーがBとCの物だけ取り出したい[1]。
Arrow::Table#slice
方針: 慣れているのでここではRubyを使うけど、多分どの言語も同じ考え方でいけると思う。
#slice
の使い方は、簡単なのはドキュメントを見れば分かるんだけど、ぱっと見、合いそうな物がない。怪しいのはブロックを使う物ぐらい。ただブロックバージョンはドキュメントを見ても使い方が分からないのでテストを見るのがよい[2]。
こういうテストがあって、今回はこれが使えそう:
test("column.in") do
sliced_table = @table.slice do |slicer|
slicer.count.in?([1, 4, 16, 64])
end
assert_equal(<<-TABLE, sliced_table.to_s)
count visible
(uint32) (bool)
0 1 true
1 4 (null)
2 16 true
3 64 (null)
TABLE
end
解答
今回はこうなる筈:
table = Arrow::Table.new(
ID: [1, 2, 3, 4, 5, 6],
カテゴリー: ["A", "B", "C", "A", "B", "C"]
)
interest_categories = ["B", "C"]
slice = table.slice {|slicer| slicer.カテゴリー.in? interest_categories}
pp slice
#<Arrow::Table:0x00000001257181c8 ptr=0x00006000002085b0>
ID カテゴリー
(uint8) (utf8)
0 2 B
1 3 C
2 5 B
3 6 C
Discussion