不支持的操作在 Cassandra 表中写入时的执行



我有以下类:

case class AucLog(timestamp:  UUID, modelname: String, good: Int,
list: List[Double])
class AucDatabase(override val connector : CassandraConnection)
extends Database[AucDatabase](connector) {
object users extends CMetrics with Connector
}
object AucDatabase extends AucDatabase(AucConnector.connector)
abstract class AucMetrics extends Table[AucMetrics, AucLog] {
object id extends UUIDColumn with PartitionKey
object name extends StringColumn
object ud extends IntColumn
object zob extends ListColumn[Double]
}
abstract class CMetrics extends AucMetrics with RootConnector {  
def store(metric : AucLog): Future[ResultSet] = {
insert.value(_.id, metric.timestamp)
.value(_.name, metric.modelname)
.value(_.ud, metric.good)
.value(_.zob, metric.list)
.consistencyLevel_=(ConsistencyLevel.ONE)
.future()

}

DmpDatabase.create()
AucDatabase.create()
val pd = DmpDatabase.users.myselect()
val timeout = new Timeout(500000)
val result = Await.result(pd, timeout.duration)
"<--- this attempt to read from my database is working - no problemo   ---> "
val todf = result.records.map { elem => elem.idcat }
val rdd = spark.sparkContext.parallelize(todf)
import spark.implicits._
rdd.toDF().show(100)
---> I'm storing one line in my database to be sure that it is not empty when 
i'm reading it. 
AucDatabase.users.store(new AucLog(UUIDs.timeBased(), "tyron", 0, List(0.1)))
val second = AucDatabase.users.myselect()
val resultmetric = Await.result(second, timeout.duration)
-----> this line cause the Execption
val r = spark.sparkContext.parallelize(resultmetric.records).toDF().show(

我不明白的是,我对两个数据库做了基本相同的事情。然而,一个抛出以下错误:不支持的操作异常:找不到com.outworkers.phantom.dsl.UUID的编码器。

谢谢。

首先,store方法是宏生成的,因此您无需创建一个。您遇到的问题可能与幻影完全无关,而是与某种 Spark 构造有关。

幻像UUID只不过是java.util.UUID的类型别名,所以我很惊讶默认类型没有直接的编码器。如果您帮助我提供Encoder类的全名,包括包,我可以明确地找出损坏的内容。

最新更新