Apache spark 卡夫卡-->;Spark Stream-如何在Spark接收器上将消息拆分为记录?

Apache spark 卡夫卡-->;Spark Stream-如何在Spark接收器上将消息拆分为记录?,apache-spark,apache-kafka,spark-streaming,Apache Spark,Apache Kafka,Spark Streaming,如果你能对这个问题有所了解,我将不胜感激。 我正在编写一个Spark流接收器来接收来自卡夫卡的消息。我收到了一组信息,这很好。我正在使用新行分隔符拆分消息块,以创建新的数据流“msgLines”(代码段已附加)。现在,我想为每一行循环“msgLines”数据流,以获得消息记录(行)来处理它 怎么做?请问有什么样的代码 多谢 JavaPairDStream messages=KafkaUtils.createStream(sc、zkQuorum、group、topicMap); // JavaD

如果你能对这个问题有所了解,我将不胜感激。 我正在编写一个Spark流接收器来接收来自卡夫卡的消息。我收到了一组信息,这很好。我正在使用新行分隔符拆分消息块,以创建新的数据流“msgLines”(代码段已附加)。现在,我想为每一行循环“msgLines”数据流,以获得消息记录(行)来处理它

怎么做?请问有什么样的代码

多谢

JavaPairDStream messages=KafkaUtils.createStream(sc、zkQuorum、group、topicMap);
//
JavaDStream msgBlock=messages.map(新函数(){
@凌驾
公共字符串调用(Tuple2 Tuple2){
返回tuple2._2();
}
});
//
JavaDStream msgLines=msgBlock.flatMap(新的flatMap函数(){
@凌驾
公共Iterable调用(字符串x){
返回列表.newArrayList(空格.split(“\n”);
}
});

您可以执行以下类似操作。在这里,我只是在控制台上打印消息,您可以将它们存储在任何外部存储中

 msgLines.foreachRDD(new VoidFunction<JavaRDD<String>>() {

        private static final long serialVersionUID = -2185091572028321496L;

        @Override
        public void call(JavaRDD<String> rdd) throws Exception {

            rdd.foreachPartition(new VoidFunction<Iterator<String>>() {

                @Override
                public void call(Iterator<String> msgs) throws Exception {
                    while(msgs.hasNext())
                        System.out.println(msgs.next());
                }
            });
        }
    });
msgLines.foreachRDD(新的VoidFunction(){
私有静态最终长serialVersionUID=-2185091572028321496L;
@凌驾
公共void调用(JavaRDD)引发异常{
foreachPartition(新的VoidFunction(){
@凌驾
公共无效调用(迭代器msgs)引发异常{
while(msgs.hasNext())
System.out.println(msgs.next());
}
});
}
});

您是否可以在每条卡夫卡信息中添加您期望的数据样本?不要完全理解“获取消息块”的含义Hi maasg..非常感谢您的帮助这是我的数据流,有3条消息,我提到的是RDD“msgBlock”变量中的流块“这只是一个测试”\n“你好”\n“kafka很棒”现在,使用flatMap函数,我正在创建另一个RDD,如下所示,使用新行分隔符“这只是一个测试”“你好”“卡夫卡很棒”’当然,数据在哪里?:-)好啊问题是什么呢?现在我想使用RDD.foreachRDD函数或其他东西来循环获取每一行我很难处理的消息…任何这样做的示例代码都会很好。。
    //
    JavaDStream<String> msgBlock = messages.map(new Function<Tuple2<String, String>, String>() {
      @Override
      public String call(Tuple2<String, String> tuple2) {
        return tuple2._2();
      }
    });


    //
    JavaDStream<String> msgLines = msgBlock.flatMap(new FlatMapFunction <String, String>(){
        @Override
        public Iterable<String> call(String x) {
          return Lists.newArrayList(SPACE.split("\n"));
        }
    });
 msgLines.foreachRDD(new VoidFunction<JavaRDD<String>>() {

        private static final long serialVersionUID = -2185091572028321496L;

        @Override
        public void call(JavaRDD<String> rdd) throws Exception {

            rdd.foreachPartition(new VoidFunction<Iterator<String>>() {

                @Override
                public void call(Iterator<String> msgs) throws Exception {
                    while(msgs.hasNext())
                        System.out.println(msgs.next());
                }
            });
        }
    });