2015-10-07 158 views
8

我嘗試使用Spark和Cassandra Spark連接器將流數據保存到Cassandra中。使用DataStax Spark連接器在Cassandra中保存空值

我做類似如下:

創建一個模型類:

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(); 

如果小號青梅值null我得到以下錯誤:

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

是否有使用星火卡桑德拉連接到存儲空值的方法嗎?

回答

0

Cassandra還沒有null的概念。列是空的或填充的。我通過以下方式在scala中解決了這個問題:我使用了map方法並檢查了空值。我用空字符串覆蓋null。而已。工作真的很好。

+0

我不這麼認爲。我嘗試使用Datastax的java映射驅動程序將空值插入到Cassandra表中,即使列類型爲int和float,它也是成功的。而且Cassandra也顯示null並返回null,因此「Cassandra沒有f null的概念」這個陳述並不是很有說服力。 –

0

在scala中,你也可以使用Options。

+0

提供相同的更多細節 – Panther

相關問題