我正在使用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();
答案 0 :(得分:0)
如果你在Cassandra的UDTValue中有空值,就会发生这种情况。由于TypeTag限制,Spark无法提供正确的错误消息。
您需要确保Pojo类中的可空字段被声明为Optional。