gpt4 book ai didi

scala - Cassandra 切片查询不适用于复合键

转载 作者:行者123 更新时间:2023-12-02 01:45:27 25 4
gpt4 key购买 nike

我是 scala 的新手,我想将我的 java 代码转换为 scala。我的数据库是 cassandra,列族定义如下所示

Family name :colFam
Rowkey: rowKey1
=>(name=comkey1:comkey1,value='xyz',timestamp=1554515485)
=>(name=comkey1:comkey2,value='xyz',timestamp=1554515485)
=>(name=comkey1:comkey3,value='xyz',timestamp=1554515485)
=>(name=comkey1:comkey4,value='xyz',timestamp=1554515485)
=>(name=comkey1:comkey5,value='xyz',timestamp=1554515485)

-------------------------------------------------------
Rowkey: rowKey2
=>(name=comkey1:comkey3,value='abc',timestamp=1554515485)
-------------------------------------------------------
Rowkey: rowKey4
=>(name=comkey1:comkey4,value='pqr',timestamp=1554515485)
-------------------------------------------------------

现在我想从 cassandra 获取所有记录,我的 columnQuery 工作正常

val sliceQuery = HFactory.createColumnQuery(rankqKeyspace, StringSerializer.get(), new CompositeSerializer(), StringSerializer.get())

我的 sliceQuery 中的问题,通常切片查询使用简单的列名工作正常但是当我使用列类型复合时,它给我错误

 var startKey = new  Composite();
var endKey = new Composite();
startKey.addComponent("comkey1", se);
startKey.addComponent("comkey2", se);
endKey.addComponent("comkey1", se);
endKey.addComponent("comkey4", se);
val sliceQuery = HFactory.createSliceQuery(rankqKeyspace, se, new CompositeSerializer(), se)
slicesQuery.setColumnFamily("colFam");
slicesQuery.setKey(rowKey1)
slicesQuery.setRange(startKey, endKey, false, Integer.MAX_VALUE);
val result = slicesQuery.execute()
val orderedRows = result.get();

它给我错误“NullPointerException”

val orderedRows = result.get();
println(orderedRows)

这一行总是返回空值

编辑问题

堆栈跟踪

java.lang.NullPointerException
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:191)
at com.google.common.collect.ImmutableClassToInstanceMap.getInstance(ImmutableClassToInstanceMap.java:147)
at me.prettyprint.hector.api.beans.AbstractComposite.serializerForComparator(AbstractComposite.java:321)
at me.prettyprint.hector.api.beans.AbstractComposite.getSerializer(AbstractComposite.java:344)
at me.prettyprint.hector.api.beans.AbstractComposite.deserialize(AbstractComposite.java:708)
at me.prettyprint.cassandra.serializers.CompositeSerializer.fromByteBuffer(CompositeSerializer.java:29)
at me.prettyprint.cassandra.serializers.CompositeSerializer.fromByteBuffer(CompositeSerializer.java:17)
at me.prettyprint.cassandra.model.HColumnImpl.getName(HColumnImpl.java:111)
at me.prettyprint.cassandra.model.HColumnImpl.toString(HColumnImpl.java:202)
at java.lang.String.valueOf(String.java:2854)
at java.lang.StringBuilder.append(StringBuilder.java:128)
at java.util.AbstractCollection.toString(AbstractCollection.java:450)
at me.prettyprint.cassandra.model.ColumnSliceImpl.toString(ColumnSliceImpl.java:54)
at java.lang.String.valueOf(String.java:2854)
at java.io.PrintStream.println(PrintStream.java:821)
at scala.Console$.println(Console.scala:240)
at scala.Predef$.println(Predef.scala:287)
at models.PinModel$.testColCompositeKey(PinModel.scala:178)
at controllers.PinController$$anonfun$test$1.apply(PinController.scala:52)
at controllers.PinController$$anonfun$test$1.apply(PinController.scala:49)
at play.api.mvc.ActionBuilder$$anonfun$apply$10.apply(Action.scala:221)
at play.api.mvc.ActionBuilder$$anonfun$apply$10.apply(Action.scala:220)
at play.api.mvc.Action$.invokeBlock(Action.scala:357)
at play.api.mvc.ActionBuilder$$anon$1.apply(Action.scala:309)
at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4$$anonfun$apply$5.apply(Action.scala:109)
at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4$$anonfun$apply$5.apply(Action.scala:109)
at play.utils.Threads$.withContextClassLoader(Threads.scala:18)
at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4.apply(Action.scala:108)
at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4.apply(Action.scala:107)
at scala.Option.map(Option.scala:145)
at play.api.mvc.Action$$anonfun$apply$1.apply(Action.scala:107)
at play.api.mvc.Action$$anonfun$apply$1.apply(Action.scala:100)
at play.api.libs.iteratee.Iteratee$$anonfun$mapM$1.apply(Iteratee.scala:481)
at play.api.libs.iteratee.Iteratee$$anonfun$mapM$1.apply(Iteratee.scala:481)
at play.api.libs.iteratee.Iteratee$$anonfun$flatMapM$1.apply(Iteratee.scala:517)
at play.api.libs.iteratee.Iteratee$$anonfun$flatMapM$1.apply(Iteratee.scala:517)
at play.api.libs.iteratee.Iteratee$$anonfun$flatMap$1$$anonfun$apply$13.apply(Iteratee.scala:493)
at play.api.libs.iteratee.Iteratee$$anonfun$flatMap$1$$anonfun$apply$13.apply(Iteratee.scala:493)
at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:42)
at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:386)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)

最佳答案

任何在这里遇到同样问题的人,Hector 不能很好地使用最新版本的 Google Guava 导致这个错误,检查是否有依赖于不同版本的 Guava 的库。对于我的确切情况,我最终使用了 Guava 13.0,因为它还包含其他库所需的部分。

如果可能的话,我会建议从 Hector 迁移,它不再维护。我个人已经开始转向使用 CQL 的新 Datastax 驱动程序,它使很多事情变得更容易。

关于scala - Cassandra 切片查询不适用于复合键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25994254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com