私は Scala (2.10) を初めて使用し、現在 HBase 内にデータを格納するための POC に取り組んでいます。データを保存するために、scala pickling ライブラリを使用して、ケース クラスをバイナリ形式にシリアル化しようとしています。
"org.scala-lang.modules" %% "scala-pickling" % "0.10.1"
私はこれらの2つの単純なクラスを持っています:
case class Location(source: Source,
country: String,
region: String,
metro: String,
postalcode: String) {
}
と
case class Source(name: String,
trust: Float,
created: String) {
/** compares this Source with the other source and returns the difference in their trust levels */
def compare(other: Source): Float = {
trust - other.trust
}
/** returns whether you should prefer this source (true) or the other source (false) */
def prefer(other: Source): Boolean = {
trust >= other.trust
}
}
object Source {
def apply(name: String, trust: Float) = new Source(name, trust, DateTime.now.toString)
def apply(row: Row) = {
val name = row.getAs[String](0)
val trust = row.getAs[Float](1)
val created = row.getAs[String](2)
new Source(name, trust, created)
}
}
そして、ScalaTest クラスを使用してシリアル化をテストしています
import scala.pickling._
import binary._
class DebuggingSpec extends UnitSpec {
"debugging" should "Allow the serialisation and deserialisation of a Link class" in {
val loc = new Location(Source("Source1", 1), "UK", "Wales", "Cardiff", "CF99 1PP")
val bytes = loc.pickle
bytes.value.length should not be(0)
}
it should "Allow the serialisation and deserialisation of a Location class" in {
val link = Link(Source("Source1", 1), "MyId1", 3)
val bytes = link.pickle
bytes.value.length should not be(0)
}
}
しかし、これをIntelliJ内またはsbtパッケージを介してコマンドラインでコンパイルすると、次のエラーメッセージが表示されます
Error:(12, 9) macro implementation not found: pickle (the most common reason for that is that you cannot use macro implementations in the same compilation run that defines them)
val bytes = loc.pickle
^
編集:私はこのコードをspark-shell(1.3.1)で正常に実行しました。これらのクラスを喜んでピクルおよびアンピクルします...しかし、コンパイル時に同一のコードとインポートが生成され、エラーが発生します