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

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

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

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

Я не знаю, что является более разумным выбором, поэтому мой вопрос:

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

Б) Если ответ на вышеприведенный ответ «нет», то не лучше ли мне потратить время на то, чтобы спрыгнуть с корабля на Java?


person iRoygbiv    schedule 09.01.2013    source источник
comment
Перейдите к рекомендациям по программному обеспечению, когда он будет открыт.   -  person user    schedule 22.01.2014
comment
Spark + PySpark + MLLib — ваш путь прямо сейчас   -  person Dan Ciborowski - MSFT    schedule 02.06.2017


Ответы (5)


Я не знаю ни одной библиотеки, которую можно было бы изначально использовать в 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.

person Charles Menguy    schedule 09.01.2013
comment
Ссылка на учебник у меня не работает, выводит меня на страницу входа. - person Patrick Coulombe; 09.08.2018

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

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

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

person BullOnTheWay    schedule 21.01.2014

Я бы рекомендовал использовать 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.

person Dan Ciborowski - MSFT    schedule 23.01.2014

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

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

в том числе:

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

мистерджоб

тупица

глупый

пидуп

и этот пример предоставляет рабочий пример параллельного ML с python и hadoop:

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

person Drew    schedule 23.01.2014

A) No

B) No

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

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

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

Наконец, Scala функциональна и естественным образом поддается математике и распараллеливанию. Вот почему вся серьезная передовая работа с большими данными и машинным обучением выполняется на Scala; например Скалдинг, Скуби, Скранч и Искра. Грубый код на Python и R уйдет в прошлое.

person samthebest    schedule 23.01.2014