2017-10-14 232 views
0

我需要读取cassandra blob类型的火花与spark-cassandra-connector并比较两个基于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作为字节缓冲区。我试过row.getAs[Array[Byte]](i),但它不满足我的需要,因为无法比较两个对象。

回答

0

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

但为了简单的用法,我读blobArray[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))