私が使用しているブタスクリプトのUDFを作成できません。私の問題は、私はpig script.pig
でスクリプトを実行すると、私は次のエラーを取得することです:ブタスクリプトのPython UDFで再モジュールが見つかりません
[main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1121: Python Error. Traceback (most recent call last):
File "utils.py", line 3, in <module>
import re
ImportError: No module named re
そして、私の「utils.py」スクリプトに、私はそうのようなモジュールをインポートしています:import re
のはなぜですre
モジュールが見つかりません。どうすれば修正できますか?
編集 私は私が直接python
コマンドを使用してPythonスクリプトを実行する場合、私はそれがre
モジュールを見つけることができなかったというエラーを取得しないことに注意すべきです。 [OK]を
編集2
は、コメントに基づいて、私は(私のシステムにインストールされていなかった)Jythonのをインストールし、ここで私のスクリプトのprint sys.path
の出力は、次のとおりです。
のpythonを使用してJythonの
使用['/home/hduser/bqmScripts/betsScripts', '/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk', '/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', '/usr/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages/PIL', '/usr/lib/python2.6/dist-packages/gst-0.10', '/usr/lib/pymodules/python2.6', '/usr/lib/python2.6/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.6/gtk-2.0', '/usr/local/lib/python2.6/dist-packages']
これを見た後に豚
['/pig/lib/Lib', '__classpath__', '__pyclasspath__/']
を使用
['', '/usr/share/jython/Lib', '/usr/lib/site-python', '__classpath__']
は、私は豚のバージョンへのJythonから欠落しているパス要素を追加しようとしました、と私は今取得することはこれです:
File "utils.py", line 8, in <module>
import re
File "/usr/share/jython/Lib/re.py", line 7, in <module>
import sre, sys
File "/usr/share/jython/Lib/sre.py", line 97, in <module>
import sre_compile
File "/usr/share/jython/Lib/sre_compile.py", line 17, in <module>
assert _sre.MAGIC == MAGIC, "SRE module mismatch"
AssertionError: SRE module mismatch
解答
最新のエラーm私は豚のインストールで使用していたバージョンのjythonを探して(2.5)、手動でインストールしました。それが問題を解決しました。
「sys.pathの内容が壊れています」という意味は分かりませんが、スクリプトを 'python'コマンドを使って手動で実行すると、エラーメッセージが表示されません。 – Deleteman
あなたのスクリプトに 'sys.path'を表示させ、' python'を使うときと 'pig'を使う時の出力を比較してください。 – deStrangis
'Pig'はCPythonではなくUythonを実行するためにJythonを使用しています。その理由は、CPythonは1つではなく他のプラットフォームでは動作しません。 –