Scala案例类中的List [String]对象

时间:2018-12-07 04:57:53

标签: scala apache-spark cassandra

我正在使用dse 5.1.0(与spark 2.0.2.6和scala 2.11.8打包在一起)。 读取卡桑德拉表,如下所示。

val sparkSession = ...
val rdd1 = sparkSession.table("keyspace.table")

此表包含一个List[String]列,例如list1,我在scala rdd中读取了该数据,例如rdd1。但是当我尝试使用编码器时,会引发错误。

val myVoEncoder = Encoders.bean(classOf[myVo])
val dataSet = rdd1.as(myVoEncoder)

我尝试过 scala.collection.mutable.listscala.collection.immutable.listscala.collection.listSeqWrappedArray。都出现了如下相同的错误。

java.lang.UnsupportedOperationException: Cannot infer type for class scala.collection.immutable.List because it is not bean-compliant

MyVo.scala

case class MyVo(
  @BeanProperty var id: String,
  @BeanProperty var duration: Int,
  @BeanProperty var list1: List[String],
  ) {
  def this() = this("", 0, null)
}

将提供任何帮助。

1 个答案:

答案 0 :(得分:3)

您应该使用Array[String]

case class MyVo(
  @BeanProperty var id: String,
  @BeanProperty var duration: Int,
  @BeanProperty var list1: Array[String]
) {
  def this() = this("", 0, null)
}

尽管需要强调,但更惯用的方法是:

import sparkSession.implicits._

case class MyVo(
  id: String,
  duration: Int,
  list1: Seq[String]
)

rdd1.as[MyVo]