List [String] Объект в классе случая Scala - PullRequest
0 голосов
/ 07 декабря 2018

Я использую 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.list, scala.collection.immutable.list, scala.collection.list, Seq, WrappedArray.Все выдали ту же ошибку, что и ниже.

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 голосов
/ 07 декабря 2018

Вы должны использовать 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]
...