Невозможно сериализовать класс Hadoop с использованием scala-pickling - PullRequest
0 голосов
/ 02 сентября 2018

Я пытаюсь сериализовать объект в JSON, используя scala-pickling 0.10.1 и Scala 2.11, но у меня очень странная проблема. Я воспроизвел минимальный пример ниже:

import org.apache.hadoop.io.compress.CompressionCodecFactory
import scala.pickling.Defaults._
import scala.pickling.json._

trait foo {
  var compressionCodecFactory1: CompressionCodecFactory = _
  val compressionCodecFactory2: CompressionCodecFactory = null
}

class blah extends foo

object FooFoo {

  def main(args: Array[String]) = {

    val k = new blah
    val pkl = k.pickle // compilation fails with error "Cannot generate a pickler for blah"
  }
}

Однако, если я удаляю или закомментирую var compressionCodecFactory1: CompressionCodecFactory = _ внутри черты foo, он отлично компилируется и выбирается. Я также попытался добавить нотацию @transient к этой переменной, но компиляция не удалась с той же ошибкой.

Почему это могло произойти?

Edit: Если я изменю var compressionCodecFactory1: CompressionCodecFactory = _ на val compressionCodecFactory1: CompressionCodecFactory = null или def compressionCodecFactory1: CompressionCodecFactory = _, компиляция завершится успешно.

...