我創建了一個python UDF來將日期時間轉換爲不同的時區。該腳本使用python(或者jython)不附帶。我試了兩件事情:在亞馬遜EMR上爲Pig UDF加載外部python模塊
- 自舉PIG安裝它自己的Jython和包括 是Jython安裝pytz。我無法讓PIG使用新安裝的jython ,它仍然會恢復到Amazon的jython。
- 設置PYTHONPATH到新的模塊已安裝
- 設置HADOOP_CLASSPATH/PIG_CLASSPATH到Jython的一個新安裝的本地目錄
每一種與結束「導入錯誤:沒有模塊名爲pytz」時我嘗試加載UDF腳本。如果我刪除pytz,腳本加載得很好,所以它肯定是給它帶來問題的外部模塊。
編輯:最初把這個作爲一個評論,但我覺得還是讓編輯:
我已經想盡辦法,我知道的獲得PIG承認另一Jython的罐子。這沒有奏效。亞馬遜的jython在這裏:/home/hadoop/.versions/pig-0.9.2/lib/pig/jython.jar,並認識到這個sys.path:/ home/hadoop/lib/Lib。我無法弄清楚如何針對這個jar構建外部庫。
http://stackoverflow.com/questions/6811549/how-can-i-include-a-python-package-with-hadoop-streaming-job/6811775#6811775可能會幫助你(他們正試圖加載不同的模塊,但該方法應該是相同的) –
或http://stackoverflow.com/questions/8129543/hadoop-streaming-importing-modules-on-emr –
是的,我試着引導包到每個奴隸。它的工作,但問題是,我不能讓PIG使用我已經安裝的jython jar。相反,它總是選擇Amazon沒有安裝任何外部庫的jython jar。 –