问题
在写MR代码输出query对应embedding向量时,出现了每个part中最后一个query对应的embedding维度输出不全的问题,但是part中其他embedding维度都是全的,在本地测试也没有问题。
原因分析
以上说明预测embedding的代码本身是没有问题的,MR框架本身也没有问题。
问题原因在于,用户进程和MR框架通过管道连接,如果用户进程没有吐完数据就退出,那么会最后产出的数据不全。
为什么用户进行没有吐完数据呢?
这是python2 print标准输出时,会先输出到stdout的缓冲中,等缓冲满了再一次性输出,如果没有满可能就不会输出。
所以以上提到的最后一个embedding维度不全的问题,可能是缓冲未满未输出造成的。
解决方法
python -u 可以使得python2.7的stdout不经过缓冲直接输出。