如何在cassandra表中存储hashmap

vfwfrxfs  于 2021-06-14  发布在  Cassandra
关注(0)|答案(1)|浏览(419)

我有一个如下所示的hashmap

Map(351608084641351 -> List(0.0, 0.0, 1.0, 0.0, 1.547012087E9, 85.099209, 25.578898, 0.0), 351608087410838 -> List(0.0, 0.0, 1.0, 0.0, 1.547013043E9, 74.356467, 22.301069, 0.0))

我想要列“id”,“d1”,“d2”,“d3”,“d4”,“evt”,“lt”,“ln”,“s” key hashmap的351608084641351是id列。 List(0.0, 0.0, 1.0, 0.0, 1.547012087E9, 85.099209, 25.578898, 0.0)"d1","d2","d3","d4","evt","lt","ln","s" 分别地
我想如上所述将这个hashmap存储到一个cassandra表中。
我可以访问这个hashmap的值和键,但是找不到在cassandra中存储它的方法我的hashmap是:hashmap[long,list[any]]
输出所需表格为:

id d1 d2 d3 d4 evt lt ln s
351608084641351 0.0 0.0 1.0 0.0 1.547012087E9 85.099209 25.578898 0.0
mcvgt66p

mcvgt66p1#

可以在boundstatement上使用method.setmap。

import scala.collection.JavaConvertors._

val statement = session.prepare(s"insert into $XYZ ($MAP) values (:$MAP)")
val map: Map[lang.Long, util.List[lang.Double]] = Map(long2Long(351608084641351) -> List(0.0, 0.0, 1.0, 0.0, 1.547012087E9, 85.099209, 25.578898, 0.0).map(num=> double2Double(num)).asJava)
val boundStatement = statement.bind
boundStatement.setMap("Column Name", map.asJava, classOf[java.lang.Long], classOf[java.util.List[java.lang.Double]]])

由于datastax驱动程序是java来设置map的,所以我们需要使用javaconverter将scalamap转换成java map。此外,我们还需要使用java数据类型作为键和值,因为我可以看到,您将键和列表作为值,因此必须将它们转换为 java.lang.Long 以及 Java.ArrayList<java.lang.Double> 使用方法 long2Long 以及 double2Double .
在绑定语句之后,您可以执行它,它应该被保存到数据库中。
假设您的Map与classof参数中提供的数据类型相同。这意味着您可以为Map提供相同的数据类型,或者必须将它们从scala转换为java。

相关问题