Uruchamiamy polecenie z przesłaniem iskry na skrypcie Pythona, który używa Sparka do równoległego wykrywania obiektów w Pythonie za pomocą Caffe. Sam skrypt działa idealnie dobrze, jeśli jest uruchamiany w skrypcie tylko w języku Python, ale zwraca błąd importu podczas używania go z kodem Spark. Wiem, że kod iskrowy nie jest problemem, ponieważ działa doskonale na moim komputerze domowym, ale nie działa dobrze na AWS. Nie jestem pewien, czy w jakiś sposób ma to związek ze zmiennymi środowiskowymi, to tak, jakby ich nie wykrył.Problemy z iskrami z importowaniem w języku Python
Te zmienne środowiskowe są ustawione:
SPARK_HOME=/opt/spark/spark-2.0.0-bin-hadoop2.7
PATH=$SPARK_HOME/bin:$PATH
PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH
PYTHONPATH=/opt/caffe/python:${PYTHONPATH}
Błąd:
16/10/03 01:36:21 WARN TaskSetManager: Lost task 0.0 in stage 0.0 (TID 0, 172.31.50.167): org.apache.spark.api.python.PythonException: Traceback (most recent call last):
File "/opt/spark/spark-2.0.0-bin-hadoop2.7/python/lib/pyspark.zip/pyspark/worker.py", line 161, in main
func, profiler, deserializer, serializer = read_command(pickleSer, infile)
File "/opt/spark/spark-2.0.0-bin-hadoop2.7/python/lib/pyspark.zip/pyspark/worker.py", line 54, in read_command
command = serializer._read_with_length(file)
File "/opt/spark/spark-2.0.0-bin-hadoop2.7/python/lib/pyspark.zip/pyspark/serializers.py", line 164, in _read_with_length
return self.loads(obj)
File "/opt/spark/spark-2.0.0-bin-hadoop2.7/python/lib/pyspark.zip/pyspark/serializers.py", line 422, in loads
return pickle.loads(obj)
File "/opt/spark/spark-2.0.0-bin-hadoop2.7/python/lib/pyspark.zip/pyspark/cloudpickle.py", line 664, in subimport
__import__(name)
ImportError: ('No module named caffe', <function subimport at 0x7efc34a68b90>, ('caffe',))
Czy ktoś wie, dlaczego miałoby to być problemem?
Ten pakiet od Yahoo zarządza tym, co próbujemy zrobić, wysyłając Caffe jako zależność od słoika, a następnie używa go ponownie w Pythonie. Ale nie znalazłem żadnych zasobów, jak go zbudować i sami go zaimportować.
https://github.com/yahoo/CaffeOnSpark
Może możesz spróbować załadować pakiet Pythona używając '.egg' zgodnie z sugestią [tutaj] (http: //stackoverflow.com/questions/24686474/shipping-python-modules-in-pyspark-to-other-nodes) –
Próbowałem, że nie działa. Mam googleed, że najwyraźniej muszę wyeksportować go jako pakiet JAR, ale nie wiem jak go zbudować, a następnie zaimportować go do Pythona. – alfredox
Jeśli zbudowałeś caffe ze źródła, czy próbowałeś ręcznie dodać biblioteki caffe do 'LD_LIBRARY_PATH'? Czy próbowałeś importować caffe z terminala Pythona? – ar7