簡體   English   中英

在 Spark Cassandra 連接器中映射 UUID

[英]Mapping UUID in Spark Cassandra connector

我有以下代碼將 RDD 保存到 cassandra:

 JavaRDD<UserByID> mapped = ......

CassandraJavaUtil.javaFunctions(mapped)
.writerBuilder("mykeyspace", "user_by_id", mapToRow(UserByID.class)).saveToCassandra();

UserByID是一個普通的可序列化 POJO,帶有以下帶有 getter 和 setter 的變量

private UUID userid;

Cassandra 表具有與 UserByID 類變量完全相同的名稱,並且 userid 在 Cassandra 表中屬於 uuid 類型,我使用相同的類映射從表中成功加載數據。

CassandraJavaRDD<UserByID> UserByIDRDD = javaFunctions(spark)
 .cassandraTable("mykeyspace", "user_by_id", mapRowTo(UserByID.class));

但是,當我調用上面的saveToCassandra函數時,出現以下異常:

org.apache.spark.SparkException: Job aborted due to stage failure: Task
0 in stage 227.0 failed 1 times, most recent failure: Lost task 0.0
in stage 227.0 (TID 12721, localhost, executor driver): 
java.lang.IllegalArgumentException: 
The value (4e22e71a-a387-4de8-baf1-0ef6e65fe33e) of the type 
(java.util.UUID) cannot be converted to 
struct<leastSignificantBits:bigint,mostSignificantBits:bigint> 

為了解決這個問題,我已經注冊了 UUID 編解碼器,但這沒有幫助,我正在使用spark-cassandra-connector_2.11版本 2.4.0 和相同版本的spark-core_2.11有什么建議嗎?

我的參考在這里,但它沒有 Java UUID 示例,感謝您的幫助。

這真是一個奇怪的錯誤——這在連接器 2.4.0 和 Spark 2.2.1 中工作正常,示例如下:

表定義:

CREATE TABLE test.utest (
    id int PRIMARY KEY,
    u uuid
);

POJO類

public class UUIDData {
    private UUID u;
    private int id;
    ...
    // getters/setters
};

星火工作

public static void main(String[] args) {
    SparkSession spark = SparkSession
            .builder()
            .appName("UUIDTest")
            .getOrCreate();

    CassandraJavaRDD<UUIDData> uuids = javaFunctions(spark.sparkContext())
            .cassandraTable("test", "utest", mapRowTo(UUIDData.class));

    JavaRDD<UUIDData> uuids2 = uuids.map(x -> new UUIDData(x.getId() + 10, x.getU()));

    CassandraJavaUtil.javaFunctions(uuids2)
            .writerBuilder("test", "utest", mapToRow(UUIDData.class))
            .saveToCassandra();
}

我注意到在您的代碼中您使用函數mapRowTomapToRow而沒有調用 POJO 上的.class - 您確定您的代碼已編譯並且您沒有運行任何舊版本的代碼嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM