Scala:从 scylla 读取数据引发异常
Posted
技术标签:
【中文标题】Scala:从 scylla 读取数据引发异常【英文标题】:Scala: Reading data from scylla throws exception 【发布时间】:2021-07-08 21:37:06 【问题描述】:我是 scala 的新手,我想运行一个简单的查询来从 scylla 中检索一些数据。这是我的代码:
val my_name = "test"
val cluster = ScyllaConnector.getCluster(clusterIpString, scyllaPreferredDc, scyllaUsername, scyllaPassword)
val session = cluster.connect(keySpace)
val preparedStatement: PreparedStatement = session.prepare(GOID_QUERY)
val nameResults = session.execute(preparedStatement.bind(my_name))
val nameResult = nameResults.one()
if(nameResult != null)
println("Here")
val id_recent = nameResult.getSet("id_recent", classOf[String])
println(id_recent)
session.close()
cluster.close()
投掷:
线程“main”中的异常 com.datastax.driver.core.exceptions.CodecNotFoundException:编解码器不是 找到请求的操作:[varchar java.util.Set
] 在 com.datastax.driver.core.CodecRegistry.notFound(CodecRegistry.java:679) 在 com.datastax.driver.core.CodecRegistry.createCodec(CodecRegistry.java:526) 在 com.datastax.driver.core.CodecRegistry.findCodec(CodecRegistry.java:506) 在 com.datastax.driver.core.CodecRegistry.access$200(CodecRegistry.java:140) 在 com.datastax.driver.core.CodecRegistry$TypeCodecCacheLoader.load(CodecRegistry.java:211) 在 com.datastax.driver.core.CodecRegistry$TypeCodecCacheLoader.load(CodecRegistry.java:208) 在 shadeio.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3527) 在 shadeio.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2319) 在 shadeio.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2282) 在 shadeio.common.cache.LocalCache$Segment.get(LocalCache.java:2197) 在 shadeio.common.cache.LocalCache.get(LocalCache.java:3937) 在 shadeio.common.cache.LocalCache.getOrLoad(LocalCache.java:3941) 在 shadeio.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4824) 在 com.datastax.driver.core.CodecRegistry.lookupCodec(CodecRegistry.java:480) 在 com.datastax.driver.core.CodecRegistry.codecFor(CodecRegistry.java:448) 在 com.datastax.driver.core.AbstractGettableByIndexData.codecFor(AbstractGettableByIndexData.java:73) 在 com.datastax.driver.core.AbstractGettableByIndexData.getSet(AbstractGettableByIndexData.java:318) 在 com.datastax.driver.core.AbstractGettableData.getSet(AbstractGettableData.java:26) 在 com.datastax.driver.core.AbstractGettableByIndexData.getSet(AbstractGettableByIndexData.java:307) 在 com.datastax.driver.core.AbstractGettableData.getSet(AbstractGettableData.java:26) 在 com.datastax.driver.core.AbstractGettableData.getSet(AbstractGettableData.java:215) 在 class.path$.main(CodeName.scala:184) 在 class.path.main(CodeName.scala) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52) 在 org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:845) 在 org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:161) 在 org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:184) 在 org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:86) 在 org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:920) 在 org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:929) 在 org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
我确信问题出现在getSet
行,它要求classOf[String]
,但我不确定用什么替换它。
这是我的表定义:
-- auto-generated definition
create table name_table
(
name text,
id_recent text,
primary key (name)
)
【问题讨论】:
【参考方案1】:您的类型不兼容 - 您在数据库中有 text
类型,但您试图将其作为一组字符串检索([varchar <-> java.util.Set<java.lang.String>]
消息直接说明了这一点)。
将getSet
替换成getString
,如果你需要一个集合,那么你需要从检索到的字符串中自己构造它
【讨论】:
以上是关于Scala:从 scylla 读取数据引发异常的主要内容,如果未能解决你的问题,请参考以下文章
如果我将偏移量设置为非零,则在使用 hyperslab 从 HDF5 文件中读取数据时出现异常
Qt 5.5 和 OpenGL:尝试调用 paintGL() 时引发读取访问冲突异常