0

ここにHadoop(およびJava)の新植物がいます。MultipleTextOutputFormatMapReduceで出力ファイル名を制御するために使用するのに助けが必要でした。

現在、このように使用しています。そして、それはうまくいくようです。ただし、私が変更しようとしているのは、ファイル名を決定するために選択されるフィールドの使用法です。

それらをfield[0]または(サンプルの場合のように)にハードコーディングする代わりに、たとえば、 または。field[3]からこれを(動的な方法で)ピックアップしたいと思います。ここの誰かが私がこれを行う方法を知っていますか(またはこの効果のために何か、つまりそれ自体である必要はありません)?JobConffield[jobConf.get("id.offset")]field[jobConf[get("date.offset")]JobConf

任意のポインタ/提案/ヒントなど。よろしくお願いします。ありがとう。

4

2 に答える 2

4

カスタムパラメータがジョブまたはキーと値のペアに基づいて異なるかどうかによって異なります。

getRecordWriter()メソッドをオーバーライドすると、JobConfオブジェクトを取得できます。これは、generateFileNameForKeyValue()を呼び出すメソッドです(HadoopソースのMultipleOutputFormatクラスの実装を確認してください)。superを呼び出してから、JobConfオブジェクトに渡したパラメーターを使用して必要な操作を行うことができます。

キーと値のペアごとにパラメーターが異なる場合は、キーまたは値の一部としてパラメーターを送信できます。次に、MultipleTextOutputFormatクラスのgetActualKey()またはgetActualValue()をオーバーライドして、必要な実際のキーまたは値オブジェクトを取得します。

お役に立てれば。

于 2011-08-10T00:43:25.180 に答える
0

オブジェクトに設定を追加できconfます。

Configuration conf = new Configuration();
conf.set("id.offset", 0);
conf.set("date.offset", 3);
...   
JobConf jobConf = new JobConf(conf, MyJob.class);

fileName関数では、探しているとおりに使用できます。field[jobConf.get("id.offset")]およびfield[jobConf[get("date.offset")]

ここでの小さな注意点:私はJobConfを使用したことがないので、実際に設定を引き出す方法がわかりません。Jobを使用していますが、map関数には、オブジェクトを取得するためcontextに使用するオブジェクトがあり、、、およびデータをとして取得します。context.getConfiguration()Configurationconfint idOffset = conf.get("id.offset");

hth

于 2011-08-08T19:22:58.673 に答える