как хранить хэш-карту в таблице кассандры - PullRequest
0 голосов
/ 09 января 2019

У меня есть хэш-карта, как показано ниже

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 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: HashMap [Long, List [Любой]]

требуется выходной таблица как:

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 голосов
/ 09 января 2019

Вы можете использовать метод .setMap на boundStatement.

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, нам необходимо преобразовать scalaMap в карту Java с помощью JavaConvertors. Также нам нужно использовать типы данных Java для нашего ключа и значения. Как я вижу, у вас есть Long в качестве ключа и List в качестве значения, поэтому вам придется преобразовать их в java.lang.Long и Java.ArrayList<java.lang.Double>, используя methond long2Long и double2Double.

После связывания оператора, который вы можете выполнить, он должен быть сохранен в базе данных.

Учитывая, что ваша карта имеет те же типы данных, которые указаны в параметре ClassOf. это означает, что либо вы можете указать один и тот же тип данных для вашей карты, либо вам придется конвертировать их из Scala в Java.

...