2015-10-07 7 views
8

Próbuję zapisać dane strumieniowe w Cassandrze za pomocą Spark i Cassandra Spark Connector.Zapisz wartość null Wartości w Cassandra przy użyciu łącznika DataStax Spark

zrobiłem coś jak następuje:

utworzyć klasę modelu

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

Mapowanie strumieniowego przesyłania zawartości do modelu

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

Zapisz:

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

Jeśli s Wartości ome są null pojawia się następujący błąd:

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

Czy istnieje sposób na przechowywanie wartości null przy użyciu Spark Cassandra Connector?

Odpowiedz

0

Cassandra nie ma pojęcia wartości zerowej. Kolumna jest pusta lub wypełniona. Rozwiązałem ten problem w scala w następujący sposób: użyłem metody map i sprawdziłem wartości null. Przekroczono wartość zerową pustym ciągiem znaków. to jest to! Działa naprawdę dobrze.

+0

Nie sądzę. Próbowałem wstawić wartości null do tabeli Cassandra za pomocą sterownika mapowania Jastrzębiego Datastax i zakończyło się ono sukcesem, nawet jeśli typ kolumny to int i float. A Cassandra wyświetla również wartość null i zwraca wartość null, stąd stwierdzenie "Cassandra nie ma pojęcia f null" nie jest zbyt przekonujące. –

0

W scala można również użyć opcji do tego.

+0

Podaj te same szczegóły – Panther

Powiązane problemy