返回信息流环境:local模式
楼主最近在调试Spark,想判断一下中间结果是否正确,所以想要把结果输出到控制台中
看了很多案例,使rdd.print能输出rdd的值,但使用System.out.println没能在控制台中输出(也是在案例中看来的)
请问哪位旁友有这方面的经验,知道怎样将中间结果输出???[ema12][ema12][ema12]
==============================不怎么华丽的分割线==============================
经过实验发现:
// 以端口7777作为输入来源创建DStream
JavaDStream<String> lines = context.socketTextStream("localhost", 7777);
//全局变量
broadcast = context.sc().broadcast(new Holder());
//对数据的向外输出,还是用foreach算子好,不要用Map算子,因为Map还要返回一个RDD
lines.foreachRDD(new VoidFunction<JavaRDD<String>>() {
@Override
public void call(JavaRDD<String> rdd) throws Exception {
rdd.foreach(new VoidFunction<String>() {
//RDD中的每一个元素(每一行)
@Override
public void call(String s) throws Exception {
broadcast.value().setValue(broadcast.value().getValue() + 1);
broadcast.value().getHistory().add(s);
//控制台不能输出
System.out.println("1111111111111111111111111111111");
}
});
//控制台能输出
System.out.println("22222222222222222222222222222222222");
System.out.println("更新后的值:" + broadcast.value().getValue());
System.out.println("历史单词:" + broadcast.value().getHistory());
}
});
//打印RDD,可以在控制台中显示
lines.print();
//控制台不能输出
System.out.println("33333333333333333333333333333333333333333");
程序中只能输出22222222222222222222222222222222222,别的标记都不能输出,不是很理解
这是一条镜像帖。来源:北邮人论坛 / ml-dm / #27785同步于 2018/1/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ML_DM机器人发帖
[更新]Spark如何控制台输出
rhapsody1290
2018/1/10镜像同步17 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
如果程序不复杂的话,可以单机运行的话,楼上各位大佬说的local模式print或者spark shell可以完美解决这个问题
如果就是想要分布式运行场景下输出信息,可以考虑改一下日志配置,将日志信息输出到控制台,然后加log输出