Образец свободной версии стандартного варианта для изменения типа данных enum - PullRequest
2 голосов
/ 03 апреля 2019

У меня есть перечисление Enumeratum, и мне нужно загрузить его во фрейм данных искры.Очевидно, что это происходит из-за отсутствия кодера.

import enumeratum._
sealed trait Foo extends EnumEntry

object Foo extends Enum[Foo] {

  val values = findValues

  case object Baz extends Foo
  case object Bar extends Foo
}
case class FooBar(a:Int, lotOfOthterFields:String, xxxx:Seq[Foo])
Seq(FooBar(1, "one", Foo.Baz), FooBar(2, "two", Foo.Bar)).toDF

Сбой с No Encoder found for type Foo.Как я могу проецировать класс дела (без шаблонов) на:

  • либо он должен работать нормально в искре (я делаю не ) хочу иметь двоичный вывод крио
  • или преобразовать его в строку с помощью Foo.Baz.entryName (но без всякого определения аналогичного класса), что-то вроде Seq(FooBar(1, "one", Foo.Baz), FooBar(2, "two", Foo.Bar)).map(allValluesButxxxx, xxxx.entryName)
...