使用DataStax Spark Connector在Cassandra中保存空值

the*_*w89 11 java cassandra apache-spark

我尝试使用Spark和Cassandra Spark Connector将流数据保存到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,
  }
}
Run Code Online (Sandbox Code Playgroud)

将流内容映射到模型:

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]);
        }
    });
Run Code Online (Sandbox Code Playgroud)

保存:

CassandraStreamingJavaUtil.javaFunctions(contentsToModel).writerBuilder("data", "contents", CassandraJavaUtil.mapToRow(ContentModel.class)).saveToCassandra();
Run Code Online (Sandbox Code Playgroud)

如果某些值是null我得到以下错误:

com.datastax.spark.connector.types.TypeConversionException: Cannot convert object null to struct.ValueRepr.
Run Code Online (Sandbox Code Playgroud)

有没有办法使用Spark Cassandra Connector存储空值?

Cit*_*lin 0

Cassandra 没有 null 的概念。列为空或已填充。我通过以下方式在 scala 中解决了这个问题:我使用了 map 方法并检查了 null 值。我用空字符串覆盖了 null 。就是这样。效果真的很好。