Существуют ли распределенные библиотеки машинного обучения для использования Python с Hadoop? [закрытый]

Я установил себя с Amazon Elastic MapReduce для того, чтобы предварительно сформировать различные стандартные задачи машинного обучения. Я широко использовал Python для локального машинного обучения в прошлом, и я не знаю Java.

насколько я могу судить, нет хорошо развитых библиотек Python для распределенного машинного обучения. Java, с другой стороны, имеет Apache Mahout и последнее Орикс от Cloudera.

по сути, я должен выберите один из двух вариантов. Перебрать parallelising мои собственные алгоритмы для использования с потоковой передачи Hadoop или оболочка Python для Hadoop пока не появятся приличные библиотеки или не перейдут на Java, чтобы я мог использовать Mahout/Oryx. Существует огромная разница между написанием собственного кода MapReduce word count и написанием собственного MapReduce SVM! Даже с помощью больших учебников, таких как этой.

Я не знаю, какой из вариантов мудрее, поэтому мой вопрос:

A) есть ли какая-то библиотека Python, которую я пропустил, которая была бы полезна? Если нет, знаете ли вы, есть ли в разработке что-либо, что будет полезно в ближайшем будущем?

B) если ответ на вышеизложенное нет, то было бы мое время лучше потратить на прыжки с корабля на Java?

6 ответов


Я не знаю никакой библиотеки, которая могла бы использоваться изначально в Python для машинного обучения на Hadoop, но простым решением было бы использовать jpype модуль, который в основном позволяет вам взаимодействовать с Java из вашего кода Python.

вы можете, например, запустить JVM следующим образом:

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"

есть очень хороший учебник по теме здесь, в которой объясняется, как использовать кластеризацию KMeans из кода Python с помощью Mahout.


вы можете попробовать Python Hadoop streaming для потоковой передачи Hadoop с использованием Python.


ответить на вопросы:

  1. насколько мне известно, нет, python имеет обширную коллекцию модулей машинного обучения и map-reduce, но не ML+MR

  2. Я бы сказал да, так как вы тяжелый программист, вы должны быть в состоянии поймать с Java довольно быстро, если вы не связаны с этими неприятными (извините без обид) J2EE фреймворков


Я бы рекомендовал использовать Java, когда вы используете EMR.

во-первых, и просто, его способ был разработан для работы. Если вы собираетесь играть в Windows, вы пишете на C#, если вы создаете веб-службу в apache, вы используете PHP. При запуске MapReduce Hadoop в EMR вы используете Java.

во-вторых, все инструменты есть для вас в Java, как AWS SDK. Я регулярно разрабатываю задания MapReduce в EMR быстро с помощью Netbeans, Cygwin (когда на Windows) и s3cmd (в с Cygwin). Я использую netbeans для создания MR jar, а cygwin + s3cmd для копирования в каталог s3 для запуска emr. Затем я также пишу программу с помощью AWS SDK для запуска кластера EMR с моей конфигурацией и запуска jar.

В-третьих, есть много инструментов отладки Hadoop(обычно для них требуется Mac или linux os) для Java

см. здесь для создания нового проекта Netbeans с maven для hadoop.


Это сообщение в блоге предоставляет довольно полный обзор фреймворков python для работы с hadoop:

http://blog.cloudera.com/blog/2013/01/a-guide-to-python-frameworks-for-hadoop/

в том числе:

Потоковая Передача Hadoop

mrjob

Дамбо

hadoopy

pydoop

и этот пример приводится рабочий пример распараллеливание мл с Python и Hadoop:

http://atbrox.com/2010/02/08/parallel-machine-learning-for-hadoopmapreduce-a-python-example/


A) Нет

B) Нет

Что ты на самом деле хотите сделать, это перейти корабль в Scala и если вы хотите сделать какой-либо хардкор ML, то вы также хотите забыть об использовании Hadoop и прыгать корабль в Искра. Hadoop-это структура MapReduce, но алгоритмы ML не обязательно сопоставляются с этой структурой потока данных, поскольку они часто являются итеративными. Это означает, что многие алгоритмы ML приведут к большому количеству этапов MapReduce - каждый этап имеет огромные накладные расходы на чтение и запись на диск.

Spark-это распределенная структура памяти, которая позволяет данным оставаться в памяти, увеличивая скорость на порядки.

теперь Scala является лучшим из всех языков мира, особенно для больших данных и ML. Он не динамически типизирован, но имеет вывод типа и неявные преобразования, и он значительно более лаконичен, чем Java и Python. Это означает, что вы можете писать код очень быстро в Scala, но более того, этот код читаем и обслуживаемый.

наконец, Scala функциональна и, естественно, поддается математике и распараллеливанию. Вот почему все серьезные передовые работы для Big Data и ML выполняются в Scala; например, ошпаривание, Scoobi, хруст и Искра. Crufty Python & R код будет в прошлом.