如何在cassandra表中存储哈希图

时间:2019-01-09 10:59:46

标签: scala apache-spark cassandra 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的哈希图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"

如上所述,我想将此哈希图存储到cassandra表中。

我能够访问此哈希图的值和键,但无法找到将其存储在cassandra中的方法 我的哈希图是: 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

1 个答案:

答案 0 :(得分:0)

您可以在boundStatement上使用方法.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来设置地图,因此我们需要使用JavaConvertors将scalaMap转换为Java地图。另外,我们还需要使用Java数据类型作为键和值。正如我所看到的那样,您将Long作为键,将List作为您的值,因此您将必须使用以下命令将它们转换为java.lang.LongJava.ArrayList<java.lang.Double> methond long2Longdouble2Double

绑定该语句后,您可以执行该语句,应该将其保存到数据库中。

鉴于您的地图具有与ClassOf参数中提供的数据类型相同的数据类型。这意味着您可以为地图提供相同的数据类型,或者必须将其从scala转换为java。