2015-10-07 3 views
8

Я пытаюсь сохранить данные потока в Cassandra, используя Spark и Cassandra Spark Connector.Сохранить null Значения в Cassandra с использованием DataStax Spark Connector

я сделал что-то вроде следующего:

Создание модели класса:

public class ContentModel { 
    String id; 

    String available_at; //may be null 

    public ContentModel(String id, String available_at){ 
    this.id=id; 
    this.available_at=available_at, 
    } 
} 

Отображение потокового контента в модели:

JavaDStream<ContentModel> contentsToModel = myStream.map(new Function<String, ContentModel>() { 
     @Override 
     public ContentModel call(String content) throws Exception { 

      String[] parts = content.split(","); 
      return new ContentModel(parts[0], parts[1]); 
     } 
    }); 

Сохранить:

CassandraStreamingJavaUtil.javaFunctions(contentsToModel).writerBuilder("data", "contents", CassandraJavaUtil.mapToRow(ContentModel.class)).saveToCassandra(); 

Если s екоторые значения null я получаю следующее сообщение об ошибке:

com.datastax.spark.connector.types.TypeConversionException: Cannot convert object null to struct.ValueRepr. 

Есть ли способ хранить нулевые значения с помощью искрового Cassandra Connector?

ответ

0

В Cassandra отсутствует понятие null. Столбец пуст или заполнен. Я решил эту проблему в scala следующим образом: я использовал метод карты и проверил нулевые значения. Я обнуляю null с пустой строкой. Вот и все. Работает очень хорошо.

+0

Я так не думаю. Я попытался вставить нулевые значения в таблицу Cassandra, используя драйвер сопоставления java сопоставления Datastax, и это успешно, даже если тип столбца - int и float. И Cassandra также отображает null и возвращает null, поэтому утверждение «Cassandra не имеет понятия f null» не очень убедительно. –

0

В scala вы также можете использовать опции для этого.

+0

Оставьте более подробную информацию – Panther

Смежные вопросы