Spark Cassandra Connector不会将所有记录添加到DB

时间:2017-01-28 21:46:31

标签: apache-spark apache-zeppelin spark-cassandra-connector

我正在使用版本#:com.datastax.spark:spark-cassandra-connector_2.11:2.0.0-M3

我有来自kafka流的RDD:

kafkaStream.foreachRDD((rdd: RDD[String]) => {
  if(rdd.count > 0) {
    println(java.time.LocalDateTime.now + ". Consumed: " + rdd.count() + " messages.");

    sqlContext.read.json(rdd)
                .select("count_metadata.tran_id")
                .write
                .format("org.apache.spark.sql.cassandra")
                .options(Map("table" -> "tmp", "keyspace" -> "kspace"))
                .mode(SaveMode.Append)
                .save();
  } else {
      println(java.time.LocalDateTime.now + ". There are currently no messages on the topic that haven't been consumed.");
  }    
});

RDD计数大约为40K,但火花连接器仅使用一致的457记录填充数据库。

sqlContext.read.json(rdd).select("count_metadata.tran_id").count

还会打印40k记录。

这是我的表格声明:

cqlsh:kspace> CREATE TABLE tmp(tran_id text PRIMARY KEY);

每条消息的tran_id都是唯一的。

我错过了什么?为什么并非所有40k记录都能进入该表?

我的日志也没有显示任何例外。

1 个答案:

答案 0 :(得分:1)

  

每条消息的tran_id都是唯一的。

我说谎了:

println(df.distinct.count);

...打印

457

是时候把它带到我们的上游来源了。