如何使用Spark streaming将整个json从kafka主题保存到Cassandra表

如何使用Spark streaming将整个json从kafka主题保存到Cassandra表,json,apache-spark,stream,apache-kafka,rdd,Json,Apache Spark,Stream,Apache Kafka,Rdd,这是我的json数据,我将其发送给kafka主题,使用spark rdd读取, 保存到卡桑德拉 [{ "sensor": "swapSensor", "sendtime": "2016-09-15T11:05:01.000Z", "data": [{ "@context": "Context" }] }] 这是我的卡桑德拉的桌子 如果不存在创建表事件(传感器文本、发送时间文本、计数bigint、entireJson文本、主键((传感器)) 我想将整个json(原始)数据推送到

这是我的json数据,我将其发送给kafka主题,使用spark rdd读取, 保存到卡桑德拉

[{
"sensor": "swapSensor",
"sendtime": "2016-09-15T11:05:01.000Z",
"data": [{
"@context": "Context"
         }]
}]
这是我的卡桑德拉的桌子
如果不存在创建表事件(传感器文本、发送时间文本、计数bigint、entireJson文本、主键((传感器))

我想将整个json(原始)数据推送到表的列entireJson

这是我的密码

object StreamingData {

  var count = 1


  def main(args: Array[String]) {

    val Array(brokers, topics, cassandraHost) = Array("1.11.22.50:9092", "c", "localhost")


    def createSparkContext(): StreamingContext = {

      val conf = new SparkConf()
        .setAppName("c Events Processing")
        .setMaster("local[2]")
        .set("spark.cassandra.connection.host", cassandraHost)
        .set("spark.cassandra.connection.keep_alive_ms", "60000") // prevent cassandra connection from being closed after every write

      val sc = new SparkContext(conf)
      // Create the context
      val ssc = new StreamingContext(sc, Seconds(8))
      val sqlContext = new SQLContext(sc);

      // Kafka stream
      val kafkaParams = Map[String, String]("metadata.broker.list" -> brokers)
      val topicsSet = topics.split(",").toSet
      val cEvents = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topicsSet).map(_._2)

      cEvents.foreachRDD { rdd =>
        count = count + 1
        sqlContext.read.json(rdd).registerTempTable("eventTable")

        val eventdf1 = sqlContext.sql("SELECT * FROM eventTable")


        eventdf1.collect.foreach(println)

        val eventdf = sqlContext.sql("SELECT sensor, sendtime,data.actor FROM eventTable")
        eventdf.printSchema()
        eventdf.map {
          case (r) => (r.getString(0) + count, sendtime, count,eventdf1)
        }
          .saveToCassandra("c", "event", SomeColumns("sensor", "sendtime", "count","entireJson"))

      }


      ssc

    }


  }

创建一个实体类,然后将其映射到表中。使用它,您可以直接将RDD存储到cassandra数据库中。 ==检查以下链接
创建一个实体类,然后将其映射到表中。使用它,您可以直接将RDD存储到cassandra数据库中。 ==检查以下链接

我尝试了这个方法,它可以将原始数据保存到我的Cassandras表列中

 var rawdata = ""
        for (item <- rdd.collect().toArray) {
          System.out.println(item);
          rawdata = item
        }
var rawdata=“”

对于(item我尝试了这个,它可以将rawdata保存到我的Cassandras表列中

 var rawdata = ""
        for (item <- rdd.collect().toArray) {
          System.out.println(item);
          rawdata = item
        }
var rawdata=“”

你的问题是什么?