2

InputFormatHadoop には、以前のマッパーから互換性のないタイプの一連のファイルにデータを変換する、このようなリデューサーがあります。

protected void setup(Context context) {
    LocalDatabase ld = new LocalDatabase("localFilePath");
}

protected void reduce(BytesWritable key, Text value, Context context) {
    ld.addValue(key, value)
}

protected void cleanup(Context context) {
    saveLocalDatabaseInHDFS(ld);
}

Pig でアプリケーションを書き直していましたが、UDF の実行が終了したことを示すクリーンアップ関数やその他の機能がないため、Pig UDF でこれがどのように行われるかわかりません。これは豚でどのように行うことができますか?

4

2 に答える 2

2

独自のカスタム OutputFormat をラップして、UDFを作成する必要があると思います。そうすればStoreFunc、出力フォーマットのRecordWriter.close()メソッドで閉じることができます。

ただし、これにより各レデューサーの HDFS にデータベースが作成されるため、すべてを 1 つのファイルにまとめたい場合は、単一のレデューサーで実行するか、2 番目のステップを実行してデータベースをマージする必要があります。

于 2013-03-22T10:31:54.017 に答える
1

UDF の最後に何かを実行したい場合は、finish() 呼び出しを使用します。これは、すべてのレコードが UDF によって処理された後に呼び出されます。レデューサーのクリーンアップ呼び出しと同じように、マッパーまたはレデューサーごとに 1 回呼び出されます。

于 2013-03-22T15:56:40.893 に答える