我正在调试Spark作业,但不知何故,Spark API调用中的任何内容都是从控制台/日志隐藏的,这是我的代码:
public static JavaRDD<SolrInputDocument> join(
JavaPairRDD<ImmutableBytesWritable, Result> hBaseRdd,
List<NuggetsField> fields) {
System.out.println("In join method....");
logger.error("In join method.... logger.error");
JavaRDD<ProductJoin> pjs = hBaseRdd.map(tuple -> {
System.out.println("in map API .....");
logger.error("in map API.... logger.error");
/**do some transformation*/
});
System.out.println("got ProductJoin RDD.....");
System.out.println("pjs.count() = " + pjs.count());
return pjs;
}
In join method....
和In join method.... logger.error
以及got ProductJoin RDD.....
和pjs.count() =
可以随时打印出来。
但是,永远不会显示in map API .....
和in map API.... logger.error
。
这是为什么?
此外,pjs.count()
值不为0.
有人能帮助我吗?
谢谢!
答案 0 :(得分:1)
这里的关键是JVM运行打印行,因为这是它将出现的日志。 在你的情况下,因为你在除了驱动程序之外的纱线上运行,你可以看到驱动程序的打印输出,但不能看到在执行程序上运行的任何代码(如地图)。 该输出进入相应的纱线容器stderr文件。
如果要在调试时查看任何打印语句,最简单的方法是以本地模式运行。
关于pjs.count(),地图操作会进行1比1的转换,但不能删除元素。稍后您需要应用过滤器来删除空值。