2017-02-05 4 views
0

私は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回の関数を減らさなければならないことがさらに複雑になります。

これについてのご意見はありがとうございます。

答えて

0

実際は非常に簡単です。 Hadoopマッパーには、最初にマッパーを設定するために呼び出される#setupメソッドがあります。あなたがしなければならないことは、この方法ではcentroids.txtファイルを読むことです:

class MyMapper extends Mapper { 

    double[][] centroids = new double[5][]; 

    public void setup(Configuration conf) { 
     InputStream is = FileSystem.get(conf).open(new Path("centroids.txt")); 
     // read centroid values 
    } 
} 

あなたはマッパーコードでファイルパスをハードコーディングしたくない場合は、ジョブをサブミットする前に、オブジェクトをコンフィギュレーションするためにそれを渡すことができます:

conf.set("centroids.path", "centroids.txt"); 

、その後はマッパーでそれを読ん

InputStream is = FileSystem.get(conf).open(new Path(conf.get("centroids.path"))); 
関連する問題