【问题标题】:Map of Blobs in Cassandra tableCassandra 表中的 Blob 映射
【发布时间】:2018-07-29 18:27:52
【问题描述】:

尝试创建新表,其中每一行都可以有称为上下文的额外数据,即键/值映射。键是字符串,值可以是几个字节(字节数组)。

以下定义无法编译,出现以下错误:

Error:(55, 30) Cannot find primitive implementation for class Array
  object context extends MapColumn[String, Array[Byte]] 

这是我的代码:

case class UserJourny(
                       id: Long,
                       time: Int,
                       activity_type: Int,
                       context: Map[String, Array[Byte]]
               )


abstract class UserJournyModel extends Table[UserJournyModel, UserJourny] {
  override def tableName: String = "user_journy"

  object dyid extends BigIntColumn with PartitionKey {
    override lazy val name = "id"
  }

  object time extends IntColumn with ClusteringOrder with Descending {
    override lazy val name = "time"
  }

  object activity_type extends IntColumn
  object context extends MapColumn[String, Array[Byte]]
}

我应该怎么做才对?

【问题讨论】:

    标签: scala cassandra phantom-dsl


    【解决方案1】:

    请改用 MapColumn[String, ByteBuffer],Cassandra 本身就可以理解。然后你需要一些基本的有趣的东西来将字节数组编码到缓冲区。

    val buf = ByteBuffer.wrap(Array[Byte](1, 2, 3, 4, 5))
    

    您还可以派生一个原语以使您的生活更轻松。

    implicit val byteArrayPrimitive = Primitive.derive[
      Array[Byte],
      ByteBuffer
    ](ByteBuffer.wrap)(_.array)
    

    现在你可以成功使用MapColumn[String, Array[Byte]]了,而且Cassandra会把它存储为buffer,它里面会有map<text, buffer>类型。

    【讨论】:

      猜你喜欢
      • 2015-01-21
      • 1970-01-01
      • 2016-10-02
      • 1970-01-01
      • 2011-06-08
      • 2017-05-18
      • 2018-07-29
      • 2018-05-06
      • 1970-01-01
      相关资源
      最近更新 更多