Как преобразовать коллекции Java в Scala в драйвере Cassandra Datastax

Схема моей Cassandra таблицы

id uuid PRIMARY KEY,
description text,
messages list<text>,
image list<blob>,
primary text,
tags set<text>,
title text,
more text

Я могу получить ResultSet из таблицы, но не знаю, как отобразить его в моей модели. Scala class, в который я хочу смоделировать строку, это

case class Data (id: Option[UUID],
                              description: String,
                              messages: List[String],
                              image: Array[Byte], 
                              first: String,
                              tags: Set[String],
                              title: String,
                              more:String)

Я знаю, что функция Row.getString("column name") преобразует text в String, но я не знаю, что делать, чтобы преобразовать list<text>, list<blob> и set<text> в scala classes.


person Manu Chadha    schedule 10.07.2018    source источник


Ответы (1)


Чтобы извлечь набор из resultSet и преобразовать его в набор scala, вы можете определить функцию следующим образом: -

 def convertToScalaSet(row: Row, columnName: String): Set[String] = 
  {

    val mayBeSet = Option(row.getSet(columnName, "String".getClass).toSet[String])

    mayBeSet match {
      case Some(set) if set.size > 0 => set
      case _ => Set[String]() //this case will cover both the possibilities of set being empty or none value
    }
  }

В подобных строках вы можете создать функцию, которая будет преобразовывать в список Scala.

  def convertToScalaList(row: Row, columnName: String): List[String] = 
  {

    val mayBeList = Option(row.getList(columnName, "String".getClass).toList)

    mayBeList match {
      case Some(list) if list.size > 0 => list
      case _ => List[String]() //this case will cover both the possibilities of list being empty or none value
    }
  }  

Тогда в вашем коде вы можете вызвать эти методы следующим образом

  val row = resultSet.one()
  convertToScalaSet(row,"tags")
  convertToScalaList(row,"messages")
person Chaitanya Waikar    schedule 10.07.2018
comment
Спасибо, но row.getList("messages","String".getClass).toList[String] не компилируется. toList не определено - person Manu Chadha; 10.07.2018
comment
row.getList("messages","String".getClass).asScala.toList[String] похоже работает - person Manu Chadha; 10.07.2018