Scala case类的无样板投影以更改枚举的数据类型
我有一个Enumeratum enum,需要将其加载到spark数据帧中。显然,这是由于缺少编码器而失败的Scala case类的无样板投影以更改枚举的数据类型,scala,apache-spark,projection,case-class,enumeratum,Scala,Apache Spark,Projection,Case Class,Enumeratum,我有一个Enumeratum enum,需要将其加载到spark数据帧中。显然,这是由于缺少编码器而失败的 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
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
失败,未找到Foo类型的编码器。
如何将案例类(无样板)投影到:
- 要么让它在spark中正常工作(我不想),要么就要二进制kryo输出
- 或者通过
(但不需要定义类似的类)将其转换为一个字符串,类似于Foo.Baz.entryName
Seq(FooBar(1,“one”,Foo.Baz),FooBar(2,“two”,Foo.Bar)).map(allValluesButxxxx,xxxx.entryName)