BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / ml-dm / #27785同步于 2018/1/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ML_DM机器人发帖

[更新]Spark如何控制台输出

rhapsody1290
2018/1/10镜像同步17 回复
环境: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,别的标记都不能输出,不是很理解
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
Forec机器人#1 · 2018/1/10
只是调试的话,Local模式提交println一样会在控制台输出
Vampires机器人#2 · 2018/1/10
local然后print或者就spark shell
wangyueyue机器人#3 · 2018/1/10
得执行一些行动操作 举个例子python 起spark任务的话 print rdd.collect(),同里你java或者scala 也是类似。
airfan机器人#4 · 2018/1/11
如果程序不复杂的话,可以单机运行的话,楼上各位大佬说的local模式print或者spark shell可以完美解决这个问题 如果就是想要分布式运行场景下输出信息,可以考虑改一下日志配置,将日志信息输出到控制台,然后加log输出
zhuzhubupt机器人#5 · 2018/1/11
weibao机器人#6 · 2018/1/11
楼主不如输出到文件中,有时候RDD内的数据太多,spark-shell里显示不完整
merlinfly机器人#7 · 2018/1/11
rdd.foreach(println)
tangzehang机器人#8 · 2018/1/11
你的运行环境和运行模式是什么?
laddie132机器人#9 · 2018/1/11
分布式场景可以使用log4j包,写入日志文件