2017-04-21 15 views
6

Tôi xây dựng một python module và tôi muốn nhập nó trong ứng dụng pyspark của tôi.pyspark nhập khẩu người dùng xác định mô-đun hoặc các tập tin .py

cấu trúc thư mục gói của tôi là:

wesam/ 
|-- data.py 
`-- __init__.py 

Một đơn giản import wesam ở phía trên cùng của kịch bản pyspark của tôi dẫn đến ImportError: No module named wesam. Tôi cũng đã cố gắng nén mã và gửi mã theo số --py-files dưới dạng recommended in this answer, không có may mắn.

./bin/spark-submit --py-files wesam.zip mycode.py 

Tôi cũng đã thêm các tập tin trình theo đề nghị của this answer, nhưng tôi đã nhận lỗi cùng ImportError: No module named wesam.

.sc.addPyFile("wesam.zip") 

Tôi thiếu gì ở đây?

Trả lời

12

Hóa ra là vì tôi đang gửi đơn đăng ký của mình theo số client mode, khi đó máy tôi chạy lệnh spark-submit sẽ chạy chương trình trình điều khiển và sẽ cần truy cập các tệp mô-đun.

enter image description here

tôi đã thêm mô-đun của tôi để biến PYTHONPATH môi trường vào nút Tôi trình công việc của tôi từ bằng cách thêm dòng sau vào tập tin .bashrc của tôi (hoặc thực hiện nó trước khi trình công việc của tôi).

export PYTHONPATH=$PYTHONPATH:/home/welshamy/modules 

Và cách đó giải quyết được vấn đề. Vì đường dẫn nằm trên nút trình điều khiển, tôi không phải nén và gửi mô-đun với --py-files hoặc sử dụng sc.addPyFile().

Chìa khóa để giải quyết bất kỳ vấn đề lỗi nhập khẩu mô-đun pyspark nào là hiểu liệu trình điều khiển hoặc nhân viên (hoặc cả hai) có cần các tệp mô-đun hay không.

quan trọng Nếu các nút công nhân cần file module của bạn, sau đó bạn cần phải vượt qua nó như là một kho lưu trữ zip với --py-files và lập luận này phải trước lập luận tập py của bạn. Ví dụ, hãy chú ý thứ tự của đối số trong các ví dụ:

này là đúng:

./bin/spark-submit --py-files wesam.zip mycode.py 

đây là không đúng:

./bin/spark-submit mycode.py --py-files wesam.zip 
+0

này là rất rõ ràng và hữu ích. cảm ơn bạn! – watsonic

+0

Trong khi điều này có thể làm việc, bạn đang có hiệu quả disting env của bạn thông qua của bạn (có lẽ) toàn cầu disted $ HOME/.bashrc. Có thực sự không có cách nào để tự động thiết lập PYTHONPATH của mô-đun công nhân? Lý do bạn muốn làm điều này là bạn đang tương tác từ REPL ipython và muốn gửi các công việc song song phụ thuộc vào một mô-đun đang ngồi trên NFS trong PYTHONPATH (nghĩ chế độ python setup.py phát triển). – mathtick

Các vấn đề liên quan