• 存储 Leap Frame
    • Leap Frame 示例
    • JSON
    • AVRO
    • 二进制数据
    • 自定义格式

    存储 Leap Frame

    我们能够使用不同的序列化策略来存储和加载 Leap Frame。目前提供的格式包括:

    1. JSON
    2. Avro
    3. Binary

    如果以上格式不能满足你的使用需求,你可以定制自己的序列化格式。

    Leap Frame 示例

    后续所有的序列化示例都会使用如下 Leap Frame。

    1. val schema = StructType(StructField("features", TensorType(BasicType.Double)),
    2. StructField("name", ScalarType.String),
    3. StructField("list_data", ListType(BasicType.String)),
    4. StructField("nullable_double", ScalarType(BasicType.Double, true)),
    5. StructField("float", ScalarType.Float),
    6. StructField("byte_tensor", TensorType(BasicType.Byte)),
    7. StructField("short_list", ListType(BasicType.Short)),
    8. StructField("nullable_string", ScalarType(BasicType.String, true))).get
    9. val dataset = Seq(Row(Tensor.denseVector(Array(20.0, 10.0, 5.0)),
    10. "hello", Seq("hello", "there"),
    11. Option(56.7d), 32.4f,
    12. Tensor.denseVector(Array[Byte](1, 2, 3, 4)),
    13. Seq[Short](99, 12, 45),
    14. None))
    15. val frame = DefaultLeapFrame(schema, dataset)

    JSON

    1. // Store Leap Frame
    2. for(bytes <- frame.writer("ml.combust.mleap.json").toBytes();
    3. frame2 <- FrameReader("ml.combust.mleap.json").fromBytes(bytes)) {
    4. println(new String(bytes)) // print the JSON bytes
    5. assert(frame == frame2)
    6. }

    AVRO

    1. // Store Leap Frame
    2. for(bytes <- frame.writer("ml.combust.mleap.avro").toBytes();
    3. frame2 <- FrameReader("ml.combust.mleap.avro").fromBytes(bytes)) {
    4. println(new String(bytes)) // print the Avro bytes
    5. assert(frame == frame2)
    6. }

    二进制数据

    最有效的存储格式,使用数据的输入 / 输出流来序列化 Leap Frame 数据。

    1. // Store Leap Frame
    2. for(bytes <- frame.writer("ml.combust.mleap.binary").toBytes();
    3. frame2 <- FrameReader("ml.combust.mleap.binary").fromBytes(bytes)) {
    4. println(new String(bytes)) // print the binary bytes
    5. assert(frame == frame2)
    6. }

    自定义格式

    MLeap 允许用户自己实现序列化器。