OdpsProtobuf
Protobuf for ODPS
Installation
Add this line to your application's Gemfile:
gem 'odps_protobuf'
And then execute:
$ bundle
Or install it yourself as:
$ gem install odps_protobuf
Usage
schema = {
'columns' => [
{ 'name' => 'uuid', 'type' => 'bigint' },
{ 'name' => 'name', 'type' => 'string' },
{ 'name' => 'price', 'type' => 'decimal' },
{ 'name' => 'discount', 'type' => 'double' },
{ 'name' => 'in_stock', 'type' => 'boolean' },
{ 'name' => 'created_time', 'type' => 'datetime' }
]
}
record1 = [1, 'apple', BigDecimal.new("1.2"), 0.5, true, Time.now]
record2 = [1000, 'red apple', BigDecimal.new("12.5"), 0.9, false, Time.now]
serializer = OdpsProtobuf::Serializer.new
protobufed_str = serializer.serialize([record1, record2], schema) # => "\b\u0002\u0012\u0005apple\u001A\u00031.2!\u0000\u0000\u0000\u0000\u0000\u0000\xE0?(\u00010\x80\xE4ͮ\xBFT\x80\xC0\xFF\u007F\xCCӥ\xE2\u000F\b\xD0\u000F\u0012\tred apple\u001A\u000412.5!\xCD\xCC\xCC\xCC\xCC\xCC\xEC?(\u00000\x80\xE4ͮ\xBFT\x80\xC0\xFF\u007Fڿ\x9C\xB8\u0006\xF0\xFF\xFF\u007F\u0004\xF8\xFF\xFF\u007F\xE5鞜\u0006"
deserializer = Odps::ProtobufDeSerializer.new
deserializer.deserialize(protobufed_str, schema) # => [[1, "apple", #<BigDecimal:7f94dc9b2a80,'0.12E1',18(18)>, 0.5, true, 2016-01-01 10:00:00 +0800], [1000, "red apple", #<BigDecimal:7f94dc9b2648,'0.125E2',18(18)>, 0.9, false, 2016-01-01 10:00:00 +0800]]
Authors && Contributors
Thanks
License
licensed under the Apache License 2.0