繁体   English   中英

使用 spark-cassandra-connector 在 spark 中从 cassandra 读取 blob 类型

[英]Read blob types from cassandra in spark with spark-cassandra-connector

我需要使用spark-cassandra-connector读取 spark 中的 cassandra blob类型,并根据 blob 字段比较两个数据集。

作为示例,以下代码显示了我的意思:

// Cassandra Table 
CREATE TABLE keyspace.test (
  id bigint,
  info blob,
  PRIMARY KEY (id)
) 

case class Test(
  id:   Long,
  info: java.nio.ByteBuffer
)
session.read
  .format("org.apache.spark.sql.cassandra")
  .options(Map(
    "table"     -> tableName,
    "keyspace"  -> keySpaceName,
    "cluster"   -> clusterName
  )).load().map(i => Test(i.getLong(0), i.get???(1)))

我需要方法而不是i.get???(1)将 blob 读取为 ByteBuffer。 我试过row.getAs[Array[Byte]](i)但它不能满足我的需要,因为无法比较两个对象。

据我了解ByteBuffer不是解决方案,因为 Spark 没有为其提供默认编码器,我必须首先为它开发我的编码器才能读取和使用它。 无论如何, ByteBuffer围绕内容实现了equals方法。

但是为了简单的使用,我将blob读取为Array[Byte]并将其转换为具有默认编码器的Seq[Byte]

case class Test(
  id:   Long,
  info: Seq[Byte]
)
session.read
  .format("org.apache.spark.sql.cassandra")
  .options(Map(
    "table"     -> tableName,
    "keyspace"  -> keySpaceName,
    "cluster"   -> clusterName
  )).load().map(i => Test(i.getLong(0), (i.getAs[Array[Byte]](1)).toSeq ))

该方法是 getBytes 并返回一个 ByteBuffer

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM