からモジュールmain.py
をインポートする MapReduce ジョブが で定義されています。次のように、Hadoop ストリーミングを使用して、このジョブを Hadoop クラスターに送信します。lib
lib.py
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
.
なぜこれが起こり、どうすれば修正できますか?
アップデート。現在のディレクトリをパスに追加しても機能しませんでした:
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
空のファイルを同じディレクトリに追加しようとしても効果がないことに注意してください。