欣赏如果你能对这个问题有所了解。 我正在写一个Spark流接收器来消费来自Kafka的消息。我收到了一块很好的消息。我正在使用新行分隔符拆分消息块以创建新的DSTream“msgLines”(附加了代码片段)。现在我想循环遍历每行的“msgLines”DStream以获取该消息记录(行)来处理它。
怎么做?请问任何示例代码?
非常感谢
JavaPairDStream<String, String> messages = KafkaUtils.createStream(sc, zkQuorum, group, topicMap);
//
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"));
}
});
答案 0 :(得分:0)
您可以在下面执行以下操作。在这里,我只是在控制台上打印消息,而不是将它们存储在任何外部存储中。
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());
}
});
}
});