2017-10-14 15 views
0

私はspark-cassandra-connectorで火花のcassandra blobタイプを読んで、BLOBフィールドに基づいて2つのデータセットを比較する必要があります。次のコード例としてspark-cassandra-connectorでsparkでcassandraのブロブタイプを読み取る

は私の平均値を示しています

// 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))) 

私はByteBufferのようブロブを読み取るために代わりi.get???(1)の方法を必要としています。私はrow.getAs[Array[Byte]](i)を試しましたが、2つのオブジェクトを比較できないため、私の必要性を満たしません。

答えて

0

私はByteBufferがSparkでデフォルトのエンコーダを提供していないため、解読できないため、Encoderを開発して使用する必要があることを理解しています。とにかく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)) 
関連する問題