使用spark streaming将json插入cassandra表

时间:2016-07-08 01:26:53

标签: cassandra spark-streaming spark-cassandra-connector

我正在使用spark streaming将一些数据从kafka中提取到cassandra中。来自kafka的数据采用json格式,看起来像这样

  

{“message”:“使用kafka appender进行测试   例外 “ ”loggerName“: ”COM ... KafkaAppenderTest“, ”PARAMS“:空, ”完整“:” 假的   异常“}

以下是我从kafka消息创建流的代码

JavaPairInputDStream<String, String> messages = KafkaUtils.createDirectStream(jssc, String.class, String.class,
            StringDecoder.class, StringDecoder.class, kafkaParams, topicsSet);

映射流以提取json消息并解析以形成LogEvent对象

messages.map(new Function<Tuple2<String, String>, LogEvent>() {
        @Override
        public LogEvent call(Tuple2<String, String> v1) throws Exception {
            Map<String, Object> map = mapper.readValue(v1._2, new TypeReference<Map<String, Object>>() {
            });
            return new LogEvent(map);
        }
    })

最后,将每个rdd写入cassandra

.foreach(new Function2<JavaRDD<LogEvent>, Time, Void>() {
        @Override
        public Void call(JavaRDD<LogEvent> rdd, Time v2) throws Exception {
            javaFunctions(rdd).writerBuilder("myks", "logs", mapToRow(LogEvent.class)).saveToCassandra();
            return null;
        }
    })

这很好但我不想将json字符串转换为LogEvent对象,相反,我想将json字符串传递给cassandra并利用其json解析功能将数据插入表中直接来自json。这样,我不必知道json中会发生什么,只要列名匹配,数据将/应该映射到表。有没有办法做到这一点?

0 个答案:

没有答案