2017-10-14 226 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))