У нас есть требование использовать пользовательские кодировщики в нашей работе. В настоящее время мы используем пользовательские кодировщики для простых типов объектов или для кортежей (т. Е. Tuple2, Tuple3, Tuple4).
Теперь нам нужно также создать собственный кодировщик для списка Scala.
Мы попробовали следующее (но это дает ошибку компиляции):
implicit def list[List](implicit c: Encoder[List]): Encoder[List] = Encoders.kryo[List](c)
Следующее дает исключение времени выполнения:
implicit def list[List[A]](implicit c: ClassTag[List]): Encoder[List] =
Encoders.kryo[List](c)
Мы также попробовали следующее (но не повезло):
class RowKey[S,A](val i: S,
val s: List[Tuple2[String, java.util.ArrayList[A]]])
// alias for the type to convert to and from
type RowKeyEncoder[S,A] = (S, List[Tuple2[String, java.util.ArrayList[A]]])
// implicit conversions
implicit def toEncoded[S,A](o: RowKey[S,A]): RowKeyEncoder[S,A] = (o.i, o.s)
implicit def fromEncoded[S,A](e: RowKeyEncoder[S,A]): RowKey[S,A] =
new RowKey[S,A](e._1, e._2)
Схема нашего набора данных выглядит следующим образом:
(String, List[Tuple2[String, java.util.ArrayList[A]]])
Любые указатели будут очень полезны.
Спасибо
Anuj