9

Mi sono impostato con Amazon Elastic MapReduce per preformare varie attività di apprendimento automatico standard. Ho usato Python estesamente per l'apprendimento automatico locale in passato e non conosco Java.Esistono librerie di apprendimento automatico distribuite per l'utilizzo di Python con Hadoop?

Per quanto posso dire, non esistono librerie Python ben sviluppate per l'apprendimento automatico distribuito. Java invece ha il Apache Mahout e il più recente Oryx da Cloudera.

In sostanza, mi sembra di dover scegliere tra due opzioni. Esegui il parallelismo con i miei algoritmi da utilizzare con Hadoop streaming o uno degli Python wrapper for Hadoop finché non esistono librerie decenti o salta su Java per poter utilizzare Mahout/Oryx. C'è un mondo di differenza tra scrivere il proprio codice di numero di parole MapReduce e scrivere il proprio MapReduce SVM! Anche con l'aiuto di fantastici tutorial come this.

non so che è la scelta più saggia, quindi la mia domanda è:

A) C'è qualche libreria Python che ho perso che sarebbe utile? In caso contrario, sai se ci sono sviluppi in corso che saranno utili nel prossimo futuro?

B) Se la risposta a quanto sopra non è la mia ora sarebbe meglio passare la nave a Java?

+0

Partenza: http://stackoverflow.com/questions/4819437/javas-mahout-equivalent-in-python – alexplanation

+0

Domande che ci chiedono di ** consigliare o trovare uno strumento, biblioteca o preferito di risorse off-site ** sono off-topic per Stack Overflow in quanto tendono ad attirare risposte e spam contestati. Invece, [descrivi il problema] (http://meta.stackexchange.com/q/139399/) e cosa è stato fatto finora per risolverlo. –

+0

Passare a [Consigli software] (http://area51.stackexchange.com/proposals/60887/software-recommendations?referrer=L1kFo5C96mMK8IujJZeI4A2) quando verrà aperto. – user

risposta

9

Non conosco alcuna libreria che possa essere utilizzata in modo nativo in Python per l'apprendimento automatico su Hadoop, ma una soluzione semplice sarebbe utilizzare il modulo jpype, che in pratica consente di interagire con Java dal codice Python.

È possibile ad esempio avviare una JVM come questo:

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'è un very good tutorial sul tema qui, che si spiega come utilizzare K-Means il clustering dal codice Python utilizzando Mahout.

4

puoi provare Python Hadoop streaming per lo streaming Hadoop utilizzando Python.

+0

come ho detto nell'OP ci sono molti f/w per usare python con hadoop - ma sto cercando l'implementazione nativa di Python ML in modo distribuito –

1

risposta alle domande:

  1. Per quanto ne so, no, Python ha una vasta collezione di machine learning e MAP-ridurre i moduli, ma non ML + MR

  2. direi di sì, dal momento che sei un programmatore pesante si dovrebbe essere in grado di catturare con Java abbastanza veloce se non si è coinvolti con quelle brutte (scusate senza offesa) J2EE quadri

1

vorrei ri elogiare utilizzando Java, quando si utilizza EMR.

Primo, e semplice, è il modo in cui è stato progettato per funzionare. Se stai giocando a Windows scrivi in ​​C#, se stai creando un servizio web in apache usi PHP. Quando esegui MapReduce Hadoop in EMR, usi Java.

In secondo luogo, tutti gli strumenti sono disponibili per te in Java, come AWS SDK. Sviluppo regolarmente i lavori di MapReduce in EMR rapidamente con l'aiuto di Netbeans, Cygwin (quando su Windows) e s3cmd (in cygwin). Io uso netbeans per costruire il mio jar MR e cygwin + s3cmd per copiarlo nella mia directory s3 per essere eseguito emr. Poi scrivo anche un programma utilizzando AWS SDK per avviare il mio cluster EMR con la mia configurazione e per eseguire il mio jar.

In terzo luogo, ci sono molti strumenti di debug Hadoop (di solito hanno bisogno di Mac o Linux OS per loro di lavorare però) per Java

Si prega di vedere here per la creazione di un nuovo progetto Netbeans con Maven per Hadoop.

-2

A) n

B) n

Quello che vuoi fare in realtà è saltare la nave a Scala e se si vuole fare qualsiasi ML hardcore allora si vuole anche dimenticare di usare Hadoop e saltare la nave a Spark. Hadoop è un framework MapReduce, ma gli algoritmi ML non si associano necessariamente a questa struttura di flusso di dati, poiché sono spesso iterativi. Ciò significa che molti algoritmi ML determineranno un numero elevato di fasi di MapReduce: ogni fase ha l'enorme sovraccarico di lettura e scrittura su disco.

Spark è un framework distribuito in memoria che consente ai dati di rimanere in memoria aumentando la velocità di ordini di grandezza.

Ora Scala è il linguaggio migliore di tutti i mondi, in particolare per Big Data e ML. Non è tipizzato dinamicamente, ma ha inferenza di tipo e conversioni implicite, ed è significativamente più conciso di Java e Python. Ciò significa che è possibile scrivere codice molto velocemente in Scala, ma inoltre, quel codice è leggibile e mantenibile.

Infine Scala è funzionale e si presta naturalmente alla matematica e alla parallelizzazione. Questo è il motivo per cui tutto il lavoro serio e all'avanguardia per Big Data e ML è stato fatto in Scala; per esempio. Scalding, Scoobi, Scrunch and Spark. Crufty Python & Il codice R sarà una cosa del passato.