在Spark中阅读Cassandra的UDT(在java中)

时间:2016-05-24 00:19:50

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

我正在使用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并实现正确反序列化的最佳方法是什么?

日Thnx

PS。奇怪的是,将Java POJO写入C *表可以很好地工作(包括原语和UDT),例如:

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

1 个答案:

答案 0 :(得分:0)

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

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