9

Tôi đã thiết lập bản thân mình với Amazon Elastic MapReduce để tạo ra các nhiệm vụ học tập máy tiêu chuẩn khác nhau. Tôi đã sử dụng Python rộng rãi cho việc học máy địa phương trong quá khứ và tôi không biết Java.Có thư viện học tập máy phân tán nào để sử dụng Python với Hadoop không?

Theo như tôi có thể nói không có thư viện Python phát triển tốt cho việc học máy được phân phối. Mặt khác, Java có Apache Mahout và gần đây hơn Oryx từ Cloudera.

Về cơ bản có vẻ như tôi phải chọn giữa hai tùy chọn. Slog thông qua song song các thuật toán của riêng tôi để sử dụng với Hadoop streaming hoặc một trong các Python wrapper for Hadoop cho đến khi các thư viện phong nha tồn tại hoặc chuyển sang Java để tôi có thể sử dụng Mahout/Oryx. Có một thế giới khác biệt giữa việc viết mã số từ của MapReduce của riêng bạn và viết ra bản đồ SVR của riêng bạn! Ngay cả với sự trợ giúp của các hướng dẫn tuyệt vời như this.

Tôi không biết đó là sự lựa chọn khôn ngoan, vì vậy câu hỏi của tôi là:

A) Có một số thư viện Python Tôi đã bỏ lỡ đó sẽ là hữu ích? Nếu không, bạn có biết nếu có bất kỳ sự phát triển nào sẽ hữu ích trong tương lai gần không?

B) Nếu câu trả lời cho câu hỏi trên không phải là lúc nào thì thời gian của tôi có thể dành nhiều thời gian hơn để chuyển sang Java?

+0

Kiểm tra: http://stackoverflow.com/questions/4819437/javas-mahout-equivalent-in-python – alexplanation

+0

Câu hỏi yêu cầu chúng tôi ** đề xuất hoặc tìm công cụ, thư viện hoặc tài nguyên ngoài trang web yêu thích ** là off-topic cho Stack Overflow vì chúng có xu hướng thu hút các câu trả lời và spam có ý kiến. Thay vào đó, [mô tả vấn đề] (http://meta.stackexchange.com/q/139399/) và những gì đã được thực hiện cho đến nay để giải quyết nó. –

+0

Tiến hành [Khuyến nghị phần mềm] (http://area51.stackexchange.com/proposals/60887/software-recommendations?referrer=L1kFo5C96mMK8IujJZeI4A2) khi nó sẽ được mở. – user

Trả lời

9

Tôi không biết bất kỳ thư viện nào có thể được sử dụng tự nhiên trong Python để học máy trên Hadoop, nhưng một giải pháp dễ dàng là sử dụng mô-đun jpype, về cơ bản cho phép bạn tương tác với Java từ bên trong mã Python của bạn.

Bạn có thể ví dụ như bắt đầu một JVM như thế này:

from jpype import * 

jvm = None 

def start_jpype(): 
    global jvm 
    if (jvm is None): 
     cpopt="-Djava.class.path={cp}".format(cp=classpath) 
     startJVM(jvmlib,"-ea",cpopt) 
     jvm="started" 

Có một very good tutorial về chủ đề ở đây, điều này giải thích bạn làm thế nào để sử dụng KMeans phân nhóm từ mã Python của bạn sử dụng Mahout.

4

bạn có thể thử Python Hadoop streaming để phát trực tuyến Hadoop bằng Python.

+0

như tôi đã đề cập trong OP có rất nhiều f/w để sử dụng python với hadoop - nhưng tôi đang tìm kiếm thực hiện bản địa của ML python trong một thời trang phân phối –

1

trả lời cho các câu hỏi:

  1. Theo hiểu biết của tôi, không, trăn có một bộ sưu tập phong phú của máy học và bản đồ-giảm module nhưng không ML + MR

  2. tôi sẽ nói có, kể từ khi bạn là một lập trình viên nặng, bạn sẽ có thể bắt kịp với Java khá nhanh nếu bạn không tham gia với những người khó chịu (xin lỗi không có hành vi phạm tội) J2EE framework

1

Tôi sẽ tái khen ngợi bằng cách sử dụng Java, khi bạn đang sử dụng EMR.

Đầu tiên và đơn giản, theo cách nó được thiết kế để hoạt động. Nếu bạn đang chơi trong Windows bạn viết trong C#, nếu bạn làm một dịch vụ web trong apache bạn sử dụng PHP. Khi bạn chạy MapReduce Hadoop trong EMR, bạn sử dụng Java.

Thứ hai, tất cả các công cụ đều có sẵn cho bạn trong Java, như AWS SDK. Tôi thường xuyên phát triển các công việc MapReduce trong EMR một cách nhanh chóng với sự trợ giúp của Netbeans, Cygwin (khi trên Windows), và s3cmd (trong Cygwin). Tôi sử dụng netbeans để xây dựng bình MR của tôi, và Cygwin + s3cmd để sao chép nó vào thư mục s3 của tôi để chạy được emr. Sau đó tôi cũng viết một chương trình sử dụng AWS SDK để khởi động cụm EMR của tôi với cấu hình của tôi và chạy jar của tôi.

Thứ ba, có rất nhiều công cụ gỡ lỗi Hadoop (thường là cần mac hay linux os cho họ làm việc mặc dù) cho Java

Xin xem here để tạo một dự án mới với Netbeans maven cho Hadoop.

-2

A) Không

B) Không

Những gì bạn thực hiện thực sự muốn làm là chuyển đến Scala và nếu bạn muốn thực hiện bất kỳ ML nào thì bạn cũng muốn quên sử dụng Hadoop và chuyển tàu đến Spark. Hadoop là một khung công tác MapReduce, nhưng các thuật toán ML không nhất thiết phải ánh xạ tới cấu trúc dataflow này, vì chúng thường lặp lại. Điều này có nghĩa là nhiều thuật toán ML sẽ dẫn đến một số lượng lớn các giai đoạn MapReduce - mỗi giai đoạn có chi phí rất lớn của việc đọc và ghi vào đĩa.

Spark là một bộ nhớ được phân phối cho phép dữ liệu ở lại trong bộ nhớ tăng tốc độ theo đơn đặt hàng của cường độ.

Bây giờ Scala là ngôn ngữ tốt nhất của tất cả các thế giới, đặc biệt là cho Big Data và ML. Nó không được gõ động, nhưng có suy luận kiểu và chuyển đổi ngầm, và nó ngắn gọn hơn nhiều so với Java và Python. Điều này có nghĩa là bạn có thể viết mã rất nhanh trong Scala, nhưng hơn nữa, mã đó có thể đọc và duy trì được.

Cuối cùng Scala là chức năng, và tự nhiên vay chính nó để toán học và song song. Đây là lý do tại sao tất cả các công việc cắt giảm nghiêm trọng cho Big Data và ML đang được thực hiện ở Scala; ví dụ. Scalding, Scoobi, Scrunch và Spark. Crufty Python & Mã R sẽ là một điều của quá khứ.

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