2015-10-07 4 views
8

Provo a salvare i dati del flusso in Cassandra usando Spark e Cassandra Spark Connector.Salvare valori null in Cassandra usando DataStax Spark Connector

ho fatto qualcosa di simile al seguente:

Creare una classe del modello:

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, 
    } 
} 

Mapping streaming di contenuti al modello:

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]); 
     } 
    }); 

Save:

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

Se S I valori sono ome null ottengo il seguente errore:

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

C'è un modo per memorizzare i valori null usando Spark Cassandra connettore?

risposta

0

Cassandra non ha il concetto di null. Una colonna è vuota o piena. Ho risolto questo problema in scala nel modo seguente: ho usato il metodo map e controllato valori nulli. Ho annullato null con una stringa vuota. Questo è tutto. Funziona davvero bene.

+0

Io non la penso così. Ho provato ad inserire valori null nella tabella di Cassandra utilizzando il driver di mapping java di Datastax e ha esito positivo, anche se il tipo di colonna è int e float. E Cassandra mostra anche null e restituisce null, quindi l'affermazione "Cassandra non ha il concetto f null" non è molto convincente. –

0

In scala è possibile utilizzare anche Opzioni per questo.

+0

Fornisci gli stessi maggiori dettagli – Panther