【问题标题】:how to store hashmap in cassandra table如何在cassandra表中存储hashmap
【发布时间】:2019-06-04 03:18:08
【问题描述】:

我有一个如下所示的哈希图

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”

key351608084641351 的 hashmap 是 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 表中。

我能够访问此哈希映射的值和键,但无法找到将其存储在 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

【问题讨论】:

  • 你在使用datastax cassandra驱动吗?
  • @RamanMishra 是的

标签: scala apache-spark cassandra hashmap


【解决方案1】:

您可以在 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> long2Longdouble2Double

绑定后可以执行的语句应该会保存到数据库中。

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

【讨论】:

  • 我的 hashmap 是 HashMap[Long,List[Any]]
  • 我认为 Object 在 Java 中可以采用任何类型
  • 它给出了错误类型不匹配;找到 : (Long, List[Any]) required: Double,in val map line
  • 我已经给出了 double 的列表作为地图的值,但似乎你有任何更改的列表,以列出任何可以工作的列表
  • 这代表什么?($MAP) 值 (:$MAP)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-31
  • 2013-05-07
  • 2016-11-07
  • 2012-04-10
  • 2012-03-02
  • 1970-01-01
  • 2023-04-10
相关资源
最近更新 更多