【问题标题】:Reading Cassandra's UDTs in Spark (in java)在 Spark 中读取 Cassandra 的 UDT(在 java 中)
【发布时间】:2016-09-21 00:25:20
【问题描述】:

我正在开发 Spark/Cassandra 应用程序 (java),在读取/映射 UDT 值时遇到了问题。

即,

CassandraJavaRDD<Pojo> rdd = javaFunctions(sc).cassandraTable("keyspace", "table", mapRowTo(Pojo.class));

从仅包含原始类型的 C* 表完成映射时工作正常,但由于 NPE 失败

Requested a TypeTag of the GettableToMappedTypeConverter which can't deserialize TypeTags due to Scala 2.10 TypeTag limitation. They come back as nulls and therefore you see this NPE.

如果使用了某些列的 UDT。

绕过此 NPE 并实现正确反序列化的最佳方法是什么?

谢谢

PS。奇怪的是,将 Java POJO 写入 C* 表可以正常工作(对原语和 UDT 而言),使用如下简单代码:

javaFunctions(rdd).writerBuilder("keyspace", "table", mapToRow(Pojo.class)).saveToCassandra();

【问题讨论】:

    标签: java apache-spark cassandra datastax-java-driver


    【解决方案1】:

    如果您在 Cassandra 中的 UDTValue 中有空值,就会发生这种情况。由于 TypeTag 限制,Spark 无法提供正确的错误消息。

    您需要确保 Pojo 类中的可为空字段声明为 Optional。

    【讨论】:

      猜你喜欢
      • 2016-10-03
      • 2017-05-26
      • 1970-01-01
      • 2018-01-24
      • 2018-10-05
      • 2020-08-20
      • 2019-05-13
      • 2016-09-15
      • 2021-01-02
      相关资源
      最近更新 更多