Breeze ( https://github.com/scalanlp/breeze ) の DenseVector クラス ( http://www.scalanlp.org/api/breeze/#breeze.linalg.DenseVector )のオブジェクトを pickle 化および unpickle してみました。カスタム ピクラーを追加する必要はありませんでした。pickle 化は成功しましたが、unpickle すると scala.MatchError がスローされました。コードを以下に示します。この問題をデバッグする際のヘルプ/ポインターは大歓迎です! 興味深いことに、問題なく DenseMatrix をピクル/アンピクルすることができました。
import scala.pickling._
import scala.pickling.Defaults._
import json._
import breeze.linalg.DenseVector
val vec = DenseVector(1.1, 2.2)
val pickledVec = vec.pickle
println(pickledVec)
val unpickledVec = pickledVec.unpickle[DenseVector[Double]]
println(unpickledVec)
出力は次のとおりです。
JSONPickle({
"$type": "breeze.linalg.DenseVector$mcD$sp",
"data": [
1.1,
2.2
],
"offset": 0,
"stride": 1,
"length": 2,
"noOffsetOrStride": true
})
scala.MatchError: [1.1, 2.2] (of class scala.util.parsing.json.JSONArray)
at scala.pickling.json.JSONPickleReader.readField(JSONPickleFormat.scala:244)
at scala.pickling.json.JSONPickleReader.beginCollection(JSONPickleFormat.scala:249)
at scala.pickling.runtime.RuntimePicklersUnpicklers$$anon$1.unpickle(CustomRuntime.scala:110)
at scala.pickling.runtime.InterpretedUnpicklerRuntime$$anon$4$$anonfun$fieldVals$1$1.apply(Runtime.scala:225)
at scala.pickling.runtime.InterpretedUnpicklerRuntime$$anon$4$$anonfun$fieldVals$1$1.apply(Runtime.scala:200)
at scala.collection.immutable.List.map(List.scala:273)
at scala.pickling.runtime.InterpretedUnpicklerRuntime$$anon$4.fieldVals$1(Runtime.scala:200)
at scala.pickling.runtime.InterpretedUnpicklerRuntime$$anon$4.unpickle(Runtime.scala:242)
at BreezeLinalgDenseVector$u005BscalaDouble$u005DUnpickler$macro$4$2$.unpickle(<console>:24)
at scala.pickling.Unpickler$class.unpickleEntry(Pickler.scala:79)
at BreezeLinalgDenseVector$u005BscalaDouble$u005DUnpickler$macro$4$2$.unpickleEntry(<console>:24)
at scala.pickling.functions$.unpickle(functions.scala:11)
at scala.pickling.UnpickleOps.unpickle(Ops.scala:23)
... 53 elided