10

さまざまな標準的な機械学習タスクを実行するために、AmazonElasticMapReduceをセットアップしました。私は過去にローカル機械学習にPythonを幅広く使用しましたが、Javaについては知りません。

私の知る限り、分散型機械学習用に十分に開発されたPythonライブラリはありません。一方、Javaには、ApacheMahoutとClouderaの最近のOryxがあります。

基本的に、2つのオプションから選択する必要があるようです。適切なライブラリが存在するまで、またはHadoopのPythonラッパーの1つで使用するために、独自のアルゴリズムを並列化するか、Javaにジャンプして、Mahout/Oryxを使用できるようにします。独自のMapReduce単語数コードを作成することと独自のMapReduceSVMを作成することには違いがあります。このような素晴らしいチュートリアルの助けを借りても。

どちらが賢明な選択かわからないので、私の質問は次のとおりです。

A)私が見逃したPythonライブラリがありますか?そうでない場合は、近い将来に役立つ開発中のものがあるかどうか知っていますか?

B)上記の答えが「いいえ」の場合、私の時間はJavaに船をジャンプするのに費やしたほうがよいでしょうか?

4

5 に答える 5

10

PythonでHadoopの機械学習にネイティブに使用できるライブラリはわかりませんが、簡単な解決策は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クラスタリングを使用する方法を説明しています。

于 2013-01-09T19:10:47.133 に答える
1

質問への回答:

  1. 私の知る限り、Pythonには機械学習モジュールとmap-reduceモジュールの広範なコレクションがありますが、ML+MRはありません。

  2. はい、そうです。あなたはヘビープログラマーなので、これらの厄介な(申し訳ありませんが)J2EEフレームワークに関与していなければ、Javaをかなり速くキャッチできるはずです。

于 2014-01-21T19:27:53.643 に答える
1

EMRを使用している場合は、Javaを使用することをお勧めします。

まず、シンプルで、動作するように設計された方法です。Windowsでプレイする場合は、C#で記述し、ApacheでWebサービスを作成する場合は、PHPを使用します。EMRでMapReduceHadoopを実行する場合は、Javaを使用します。

次に、AWS SDKのように、すべてのツールがJavaに用意されています。私は、Netbeans、Cygwin(Windowsの場合)、およびs3cmd(cygwinの場合)を使用して、EMRでMapReduceジョブを定期的に迅速に開発しています。私はnetbeansを使用してMRjarを構築し、cygwin+s3cmdを使用してそれをs3ディレクトリにコピーしてemrで実行します。次に、AWS SDKを使用してプログラムを作成し、構成を使用してEMRクラスターを起動し、jarを実行します。

第三に、Java用の多くのHadoopデバッグツールがあります(通常、それらが機能するにはMacまたはLinux OSが必要です)

Hadoop用のMavenを使用した新しいNetbeansプロジェクトの作成については、こちらをご覧ください。

于 2014-01-23T00:22:11.420 に答える
0

このブログ投稿は、hadoopを操作するためのPythonフレームワークのかなり包括的なレビューを提供します。

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

含む:

Hadoopストリーミング

mrjob

ダンボ

ハドゥーピー

pydoop

この例は、PythonとHadoopを使用した並列化MLの実用的な例を示しています。

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

于 2014-01-23T07:58:11.343 に答える
-2

A)いいえ

B)いいえ

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

Sparkはメモリ内分散フレームワークであり、データをメモリ内にとどめ、桁違いに速度を上げることができます。

現在、Scalaは、特にビッグデータとMLにとって、世界で最も優れた言語です。動的に型付けされていませんが、型推論と暗黙的な変換があり、JavaやPythonよりもはるかに簡潔です。これは、Scalaで非常に高速にコードを記述できることを意味しますが、さらに、そのコードは読み取り可能で保守可能です。

最後に、Scalaは機能的であり、当然、数学と並列化に役立ちます。これが、ビッグデータとMLのすべての真剣な最先端の作業がScalaで行われている理由です。例:Scalding、Scoobi、Scrunch、Spark。Crufty Python&Rコードは過去のものになります。

于 2014-01-23T10:25:21.797 に答える