我在 中定义了一个 MapReduce 作业main.py
,它lib
从lib.py
. 我使用 Hadoop Streaming 将此作业提交到 Hadoop 集群,如下所示:
hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar -files lib.py,main.py
-mapper "./main.py map" -reducer "./main.py reduce"
-input input -output output
据我了解,这应该将两者都main.py
放入lib.py
每台计算机上的分布式缓存文件夹lib
中,从而使模块可用于main
. 但这并没有发生:从日志中我看到文件确实复制到了同一目录,但main
无法导入lib
,抛出ImportError
.
为什么会发生这种情况,我该如何解决?
UPD。将当前目录添加到路径不起作用:
import sys
sys.path.append(os.path.realpath(__file__))
import lib
# ImportError
但是,手动加载模块就可以了:
import imp
lib = imp.load_source('lib', 'lib.py')
但这不是我想要的。那么为什么Python解释器看到.py
同目录下的其他文件,却无法导入呢?请注意,我已经尝试将空__init__.py
文件添加到同一目录但没有效果。