私はhadoop/mapreduce/javaでk-meansアルゴリズムを実行する必要がある宿題です。 k-meansアルゴリズムの各反復は1つのMapReduceジョブであり、質問はn個のジョブの連鎖を含みます。ここで、nは実行するk-meansアルゴリズムの反復回数です。MapReduce - テキストファイルで読み込むためにhadoop設定オブジェクトを使用する
我々は、centroids.txtと呼ばれる、初期の重心のファイルを与えられた以下の通りである:
1. 0 0.64 0.64 0 0.32
2. 0.21 0.28 0.5 0 0.14
3. 0.06 0 0.71 0 1.23
4. 1.03 1.36 0.32 0.51 0
5. 0 0 0 0 0.63
が...行番号がファイルに含まれていません。各行は5次元ベクトルであり、k平均アルゴリズムの初期クラスタ重心を表す。ここでは5つの初期クラスターがあります。
次は、我々は、以下に示すdata.txtを呼ばれ、我々はクラスタに割り当てる必要がありますデータポイントのファイル、持っている:
1. 0 0.64 0.64 0 0.32
2. 0.21 0.28 0.5 0 0.14
3. 0.06 0 0.71 0 1.23
4. 0 0 0 0 0.63
5. 0 0 0 0 0.63
6. ...
...
...ここは10000〜(データポイントの我々多くの行ことを示しているがこの問題)。ここでも、各行は5次元のベクトルです。
私の質問では、MapReduceジョブを構造化することに関連しています。これは私が現在よく慣れていないものです(mapreduceということです)。各マップ関数について、入力ファイルはdata.txtファイルです。これは、読み込み、各行のチェック、線の重心の確認、適切なキーと値のペアの作成が必要なファイルです。しかし、私はcentroids.txtファイルをマッパーにどのように読み込むのですか?私の教授は次のヒントを与えました:
"重心ファイルの場所をマッパーと共有する必要があります。これを行うには多くの方法があり、適切な方法を使用することができます。 Hadoop Configurationオブジェクトを設定オブジェクトのプロパティとして設定し、Mapperセットアップ関数でプロパティ値を取得することができます。
私は混乱しています。私のプログラムには、主な機能、実行機能、マッパー、レデューサーがあります。また、Configurationのset()メソッドとget()メソッドを使用することをお勧めしました。次に、設定内の各繰り返しのファイル名を設定し、それをジョブに渡します。その後、マッパーでそのファイル名から読み込むことができます。
これは少し混乱します。 main()またはrun()関数でhadoop設定オブジェクトを作成しますか?私のメイン関数でset()を実行し、map関数でget()を呼び出すか、実行関数でset()を実行しますか?さらに、新しい/更新されたcentroids.txtファイルを使用するたびに、マップを実行してforループでn回の関数を減らさなければならないことがさらに複雑になります。
これについてのご意見はありがとうございます。