red-arrow 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9557cac923316c8ff79fe9308b97d9a48dfe7a92
4
- data.tar.gz: e8e485563267fefa6219e4890d5de589b79fa186
3
+ metadata.gz: d66932ddc8b1edd4d0a00a3c44ace6a54eb23509
4
+ data.tar.gz: d373ca2d306387a5709e8b2b28946e10ec5529ee
5
5
  SHA512:
6
- metadata.gz: 4022b9925abe4269ced64d25f2ac5ac24cb4752b58d924e00a2f818f62c70b8f79e458055c0d34b20f8b0ad8077d1bfeadaf530c04d64c1ebc095d146c344106
7
- data.tar.gz: 01517b6e438f619b0f8ad3fe6b7d1fbf76195afed624523de4d42896a87a1eb2fcd0d924202952f4bc6160936cbc69c4cb580e3f609bc99ff940c36809deabf3
6
+ metadata.gz: d018d51d091d4ad37cd608f4bd951a837b385d36cf975a0a0652a5d1173a847aa2f875705e46d66e533b8246d5f3b0b0b75d936fdcdd2e794e1676463759bd66
7
+ data.tar.gz: 434cd73edc6180de459d9bfa95272703d7d0ffb1a095ea7e7f64462880bae79cdb14ccadbcd8285966462832c80c8837a55c26c79e424c9160ceb9e719989639
@@ -1,5 +1,15 @@
1
1
  # News
2
2
 
3
+ ## 0.3.0 - 2017-05-06
4
+
5
+ ### Improvements
6
+
7
+ * `Arrow::Record#to_h`: Added.
8
+
9
+ * `#to_arrow`: Added convenience methods for polymorphism.
10
+
11
+ * Supported Apache Arrow 0.3.0.
12
+
3
13
  ## 0.2.2 - 2017-04-24
4
14
 
5
15
  ### Improvements
@@ -33,5 +33,9 @@ module Arrow
33
33
  yield(self[i])
34
34
  end
35
35
  end
36
+
37
+ def to_arrow
38
+ self
39
+ end
36
40
  end
37
41
  end
@@ -13,11 +13,10 @@
13
13
  # limitations under the License.
14
14
 
15
15
  module Arrow
16
- module BlockOpenable
16
+ module BlockClosable
17
17
  def open(*args, &block)
18
- io = super(*args)
18
+ io = new(*args)
19
19
  return io unless block
20
- return yield(io) unless io.respond_to?(:close)
21
20
 
22
21
  begin
23
22
  yield(io)
@@ -0,0 +1,28 @@
1
+ # Copyright 2017 Kouhei Sutou <kou@clear-code.com>
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module Arrow
16
+ if const_defined?(:MemoryMappedInputStream)
17
+ class MemoryMappedFile
18
+ class << self
19
+ def open(path, mode, &block)
20
+ warn("#{self}.#{__method__}(path, mode, &block): " +
21
+ "use #{MemoryMappedInputStream}.open(path, &block) instead: " +
22
+ caller(1, 1)[0])
23
+ MemoryMappedInputStream.open(path, &block)
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,53 @@
1
+ # Copyright 2017 Kouhei Sutou <kou@clear-code.com>
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module Arrow
16
+ class FileReader
17
+ include Enumerable
18
+
19
+ # For backward compatibility
20
+ if respond_to?(:open)
21
+ class << self
22
+ alias_method :open_raw, :open
23
+ def open(input)
24
+ warn("#{self}.#{__method__}: use #{self}.new instead: #{caller(1, 1)[0]}")
25
+ reader = open_raw(input)
26
+ if block_given?
27
+ yield(reader)
28
+ else
29
+ reader
30
+ end
31
+ end
32
+ end
33
+ else
34
+ class << self
35
+ def open(input)
36
+ warn("#{self}.#{__method__}: use #{self}.new instead #{caller(1, 1)[0]}")
37
+ reader = new(input)
38
+ if block_given?
39
+ yield(reader)
40
+ else
41
+ reader
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ def each
48
+ n_record_batches.times do |i|
49
+ yield(get_record_batch(i))
50
+ end
51
+ end
52
+ end
53
+ end
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- require "arrow/block-openable"
15
+ require "arrow/block-closable"
16
16
 
17
17
  module Arrow
18
18
  class Loader < GObjectIntrospection::Loader
@@ -32,17 +32,20 @@ module Arrow
32
32
  require "arrow/array-builder"
33
33
  require "arrow/field"
34
34
  require "arrow/record-batch"
35
+ require "arrow/tensor"
35
36
 
36
- require "arrow/ipc-file-reader"
37
- require "arrow/ipc-stream-reader"
37
+ require "arrow/file-reader"
38
+ require "arrow/stream-reader"
39
+
40
+ require "arrow/compatibility"
38
41
  end
39
42
 
40
43
  def load_object_info(info)
41
44
  super
42
45
 
43
46
  klass = @base_module.const_get(rubyish_class_name(info))
44
- if klass.respond_to?(:open)
45
- klass.singleton_class.prepend(BlockOpenable)
47
+ if klass.method_defined?(:close)
48
+ klass.extend(BlockClosable)
46
49
  end
47
50
  end
48
51
 
@@ -27,5 +27,13 @@ module Arrow
27
27
  def columns
28
28
  @record_batch.columns
29
29
  end
30
+
31
+ def to_h
32
+ attributes = {}
33
+ @record_batch.schema.fields.each_with_index do |field, i|
34
+ attributes[field.name] = self[i]
35
+ end
36
+ attributes
37
+ end
30
38
  end
31
39
  end
@@ -13,14 +13,14 @@
13
13
  # limitations under the License.
14
14
 
15
15
  module Arrow
16
- module IPC
17
- class FileReader
18
- include Enumerable
16
+ class StreamReader
17
+ include Enumerable
19
18
 
20
- def each
21
- n_record_batches.times do |i|
22
- yield(get_record_batch(i))
23
- end
19
+ def each
20
+ loop do
21
+ record_batch = next_record_batch
22
+ break if record_batch.nil?
23
+ yield(record_batch)
24
24
  end
25
25
  end
26
26
  end
@@ -13,17 +13,9 @@
13
13
  # limitations under the License.
14
14
 
15
15
  module Arrow
16
- module IPC
17
- class StreamReader
18
- include Enumerable
19
-
20
- def each
21
- loop do
22
- record_batch = next_record_batch
23
- break if record_batch.nil?
24
- yield(record_batch)
25
- end
26
- end
16
+ class Tensor
17
+ def to_arrow
18
+ self
27
19
  end
28
20
  end
29
21
  end
@@ -13,5 +13,5 @@
13
13
  # limitations under the License.
14
14
 
15
15
  module Arrow
16
- VERSION = "0.2.2"
16
+ VERSION = "0.3.0"
17
17
  end
@@ -14,4 +14,6 @@
14
14
 
15
15
  require "arrow"
16
16
 
17
+ require "tempfile"
18
+
17
19
  require "test-unit"
@@ -0,0 +1,112 @@
1
+ # Copyright 2017 Kouhei Sutou <kou@clear-code.com>
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ class FileReaderTest < Test::Unit::TestCase
16
+ test("write/read") do
17
+ fields = [
18
+ Arrow::Field.new("uint8", :uint8),
19
+ Arrow::Field.new("uint16", :uint16),
20
+ Arrow::Field.new("uint32", :uint32),
21
+ Arrow::Field.new("uint64", :uint64),
22
+ Arrow::Field.new("int8", :int8),
23
+ Arrow::Field.new("int16", :int16),
24
+ Arrow::Field.new("int32", :int32),
25
+ Arrow::Field.new("int64", :int64),
26
+ Arrow::Field.new("float", :float),
27
+ Arrow::Field.new("double", :double),
28
+ ]
29
+ schema = Arrow::Schema.new(fields)
30
+
31
+ tempfile = Tempfile.new(["batch", ".arrow"])
32
+ Arrow::FileOutputStream.open(tempfile.path, false) do |output|
33
+ Arrow::FileWriter.open(output, schema) do |writer|
34
+ uints = [1, 2, 4, 8]
35
+ ints = [1, -2, 4, -8]
36
+ floats = [1.1, -2.2, 4.4, -8.8]
37
+ columns = [
38
+ Arrow::UInt8Array.new(uints),
39
+ Arrow::UInt16Array.new(uints),
40
+ Arrow::UInt32Array.new(uints),
41
+ Arrow::UInt64Array.new(uints),
42
+ Arrow::Int8Array.new(ints),
43
+ Arrow::Int16Array.new(ints),
44
+ Arrow::Int32Array.new(ints),
45
+ Arrow::Int64Array.new(ints),
46
+ Arrow::FloatArray.new(floats),
47
+ Arrow::DoubleArray.new(floats),
48
+ ]
49
+
50
+ record_batch = Arrow::RecordBatch.new(schema, 4, columns)
51
+ writer.write_record_batch(record_batch)
52
+ end
53
+ end
54
+
55
+ Arrow::MemoryMappedInputStream.open(tempfile.path) do |input|
56
+ reader = Arrow::FileReader.new(input)
57
+ reader.each do |record_batch|
58
+ assert_equal([
59
+ {
60
+ "uint8" => 1,
61
+ "uint16" => 1,
62
+ "uint32" => 1,
63
+ "uint64" => 1,
64
+ "int8" => 1,
65
+ "int16" => 1,
66
+ "int32" => 1,
67
+ "int64" => 1,
68
+ "float" => 1.100000023841858,
69
+ "double" => 1.1,
70
+ },
71
+ {
72
+ "uint8" => 2,
73
+ "uint16" => 2,
74
+ "uint32" => 2,
75
+ "uint64" => 2,
76
+ "int8" => -2,
77
+ "int16" => -2,
78
+ "int32" => -2,
79
+ "int64" => -2,
80
+ "float" => -2.200000047683716,
81
+ "double" => -2.2,
82
+ },
83
+ {
84
+ "uint8" => 4,
85
+ "uint16" => 4,
86
+ "uint32" => 4,
87
+ "uint64" => 4,
88
+ "int8" => 4,
89
+ "int16" => 4,
90
+ "int32" => 4,
91
+ "int64" => 4,
92
+ "float" => 4.400000095367432,
93
+ "double" => 4.4,
94
+ },
95
+ {
96
+ "uint8" => 8,
97
+ "uint16" => 8,
98
+ "uint32" => 8,
99
+ "uint64" => 8,
100
+ "int8" => -8,
101
+ "int16" => -8,
102
+ "int32" => -8,
103
+ "int64" => -8,
104
+ "float" => -8.800000190734863,
105
+ "double" => -8.8,
106
+ },
107
+ ],
108
+ record_batch.collect(&:to_h))
109
+ end
110
+ end
111
+ end
112
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: red-arrow
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kouhei Sutou
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-24 00:00:00.000000000 Z
11
+ date: 2017-05-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gobject-introspection
@@ -111,18 +111,21 @@ files:
111
111
  - lib/arrow.rb
112
112
  - lib/arrow/array-builder.rb
113
113
  - lib/arrow/array.rb
114
- - lib/arrow/block-openable.rb
114
+ - lib/arrow/block-closable.rb
115
+ - lib/arrow/compatibility.rb
115
116
  - lib/arrow/field.rb
116
- - lib/arrow/ipc-file-reader.rb
117
- - lib/arrow/ipc-stream-reader.rb
117
+ - lib/arrow/file-reader.rb
118
118
  - lib/arrow/loader.rb
119
119
  - lib/arrow/record-batch.rb
120
120
  - lib/arrow/record.rb
121
+ - lib/arrow/stream-reader.rb
122
+ - lib/arrow/tensor.rb
121
123
  - lib/arrow/version.rb
122
124
  - red-arrow.gemspec
123
125
  - test/helper.rb
124
126
  - test/run-test.rb
125
127
  - test/test-array.rb
128
+ - test/test-file-reader.rb
126
129
  - test/test-record-batch.rb
127
130
  homepage: https://github.com/red-data-tools/red-arrow
128
131
  licenses:
@@ -154,3 +157,4 @@ test_files:
154
157
  - test/helper.rb
155
158
  - test/run-test.rb
156
159
  - test/test-array.rb
160
+ - test/test-file-reader.rb