9

私は、さまざまな標準的な機械学習タスクを実行するために、Amazon Elastic MapReduceで自分自身を設定しました。私は過去にローカルマシンの学習に広範囲にPythonを使用しましたが、私はJavaを知らないのです。HadoopでPythonを使用するための分散型機械学習ライブラリはありますか?

私が知る限り、分散型機械学習のためのPythonライブラリは開発されていません。一方、JavaはApache Mahoutであり、Clouderaのより最近のOryxです。

本質的に私は2つの選択肢の中から選択する必要があるようです。まともなライブラリが存在するか、またはMahout/Oryxを使用できるようにJavaに飛び込むまで、Hadoop streamingまたはPython wrapper for Hadoopのいずれかと一緒に使用する自分のアルゴリズムを並列化してください。独自のMapReduceワードカウントコードの作成と独自のMapReduce SVMの作成には、異なる世界があります。 thisのような偉大なチュートリアルの助けを借りても。

私は私の質問があるので、賢明な選択であるかわからない:

A)が有用であろう、私が見逃しているいくつかのPythonライブラリはありますか?もしそうでなければ、近い将来に役に立つ開発があるかどうか知っていますか?

B)上記の答えが「いいえ」ならば、私の時間は船をJavaに飛ばすことに費やされるでしょうか?

+0

チェックアウト:http://stackoverflow.com/questions/4819437/javas-mahout-equivalent-in-python – alexplanation

+0

**ツール、図書館、またはお気に入りのオフサイトリソースを推薦する**を求める**の質問は** Stack Overflowの話題になっているのは、オピニオン回答とスパムを集める傾向があるからです。代わりに、[問題を説明してください](http://meta.stackexchange.com/q/139399/)、それを解決するために今まで何が行われていますか。 –

+0

[ソフトウェアの推奨事項](http://area51.stackexchange.com/proposals/60887/software-recommendations?referrer=L1kFo5C96mMK8IujJZeI4A2)を開きます。 – user

答えて

9

Hadoopで機械学習するためにPythonでネイティブに使用できるライブラリについてはわかりませんが、簡単にはjpypeモジュールを使用することです。これは基本的にPythonコード内からJavaと対話することを可能にします。

あなたは、たとえば次のように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" 

がどのようにMahoutのを使用して、Pythonコードから関数kmeansクラスタリングを使用する方法を説明し、ここでのトピック、上のvery good tutorialがあります。

4

Python Hadoop streamingは、Pythonを使用してHadoopストリーミングを試すことができます。質問へ

+0

に行くあなたの方法です.HyoopでPythonを使うための多くのf/wがありますが、Python MLのネイティブ実装を分散的に探しています –

1

回答:

  1. 私の知る限りは、ない、Pythonは機械学習とMAP-削減モジュールの豊富なコレクションを持っているではなく、ML + MR

  2. 私は、そう言うだろうあなたはあなたが厄介な(ごめん悪気)J2EEフレームワークと

1

に関与していない場合は、かなり速いのJavaをキャッチすることができるはず重いプログラマなので、私は再だろうEMRを使用しているときはJavaを使用してください。

まず、シンプルな、それが動作するように設計された方法。あなたがC#で書いたWindowsで遊ぶなら、あなたがPHPを使うapacheでWebサービスを作るなら。実行中のMapReduce HadoopをEMRで実行すると、Javaが使用されます。

第2に、AWS SDKのようにすべてのツールがJava用に用意されています。 NetBeans、Cygwin(Windowsの場合)、s3cmd(cygwinの場合)の助けを借りて、迅速にEMRでMapReduceジョブを開発します。私はnetbeansを使用して私のMR jarを構築し、cygwin + s3cmdを実行してem3にするためにs3ディレクトリにコピーします。次に、AWS SDKを使用して自分のEMRクラスタを自分の設定で起動し、自分のjarを実行するプログラムも作成します。

第三に、Javaの

のための多くのHadoopデバッグツール(それらがが動作するために、通常のMacを必要とするか、LinuxのOS)があるHadoopのためのMavenを使用して新しいNetBeansプロジェクトを作成するためのhereを参照してください。

0

このブログ記事は、Hadoopので作業するためのPythonのフレームワークのかなり包括的な見直しを提供しています。

含む

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

Hadoopのストリーミング

mrjob

ダンボ

hadoopy

pydoop

この例では、PythonとのHadoopと並列MLの実施例を提供する:

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

-2

A)いいえ

B)いいえ

実際にに行きたい場合は、にスカラにジャンプしてください。ハードコアMLをしたい場合は、Hadoopを忘れてSparkに飛びます。 HadoopはMapReduceフレームワークですが、MLアルゴリズムは必ずしも反復的であるため、必ずしもこのデータフロー構造にマッピングされるとは限りません。これは、多くのMLアルゴリズムが多数のMapReduceステージをもたらすことを意味します。各ステージは、ディスクへの読み書きの膨大なオーバーヘッドを持っています。

スパークはメモリ内に分散されたフレームワークであり、データをメモリ内にとどまり、桁違いに速くなります。

今、Scalaは、特にBig DataとMLにとって、世界の言語の中で最高のものです。それは動的に型付けされていませんが、型推論と暗黙の変換があり、JavaやPythonよりもはるかに簡潔です。つまり、Scalaでコードを非常に速く書くことができますが、そのコードは読みやすくメンテナンス可能です。

最後に、Scalaは機能的であり、自然に数学と並列化に役立ちます。このため、ビッグデータとMLの深刻な最先端作業はすべてScalaで行われています。例えばスケーリング、スクービー、スクランチ、スパーク。 Crufty Python & Rコードは過去のものになります。

関連する問題