Apache spark 卡夫卡-->;Spark Stream-如何在Spark接收器上将消息拆分为记录?
如果你能对这个问题有所了解,我将不胜感激。 我正在编写一个Spark流接收器来接收来自卡夫卡的消息。我收到了一组信息,这很好。我正在使用新行分隔符拆分消息块,以创建新的数据流“msgLines”(代码段已附加)。现在,我想为每一行循环“msgLines”数据流,以获得消息记录(行)来处理它 怎么做?请问有什么样的代码 多谢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
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());
}
});
}
});