2016-05-24 2 views
2

Я работаю над приложением Spark/Cassandra (java) и столкнулся с проблемой при чтении/отображении значений UDT.Чтение UDTs Cassandra в Spark (в java)

А именно,

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. 

, если используются для некоторых Пользовательские типы столбцов.

Каков наилучший способ обойти этот NPE и добиться правильной десериализации?

Thnx

PS. Как ни странно, писать Java POJO, к C * таблицы работает отлично (как для примитивов и UDT) с тривиальным кодом, как:

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

ответ

0

Это происходит, если у вас есть аннулирует в вашем UDTValue в Кассандре. Spark не может предоставить правильное сообщение об ошибке из-за ограничений TypeTag.

Вы должны убедиться, что поля с нулевым значением в вашем классе Pojo объявлены как необязательные.