Spark 2.4: Как создать собственный кодировщик для типа List? - PullRequest
1 голос
/ 29 апреля 2020

У нас есть требование использовать пользовательские кодировщики в нашей работе. В настоящее время мы используем пользовательские кодировщики для простых типов объектов или для кортежей (т. Е. 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...