1

これは、Hl7 メッセージを含むファイルを読み取り、Hapi Iterator ( http://hl7api.sourceforge.netから)を使用して反復処理するコードです。

File file = new File("/home/training/Documents/msgs.txt");
InputStream is = new FileInputStream(file);
is = new BufferedInputStream(is);

Hl7InputStreamMessageStringIterator iter = new   
     Hl7InputStreamMessageStringIterator(is);

これを map 関数内で実行したいですか? ご存知のように、Hapi はメッセージ全体しか解析できないため、ファイル全体を単一の値として一度に読み取り、それを String (ファイル サイズは 7 KB) に変更するには、 InputFormatでの分割を防ぐ必要があることは明らかです。

私はこれらすべてに初心者なので、ご容赦ください。

4

3 に答える 3

1

データ ファイルを分割したくない場合、またはファイル全体を処理する単一のマッパーが必要な場合。1 つのファイルが 1 つのマッパーのみによって処理されるようにします。その場合、map/reduce inputformat を拡張し、isSplitable() メソッドをオーバーライドして、ブール値として「false」を返すと役立ちます。

参照用: (コードに基づいていません) https://gist.github.com/sritchie/808035

于 2016-04-26T08:54:17.340 に答える
1

独自のFileInputFormatサブクラスを実装する必要があります。

  1. isSplittable()これは、マッパーの数が入力ファイルの数と等しくなることを意味するメソッドをオーバーライドする必要がありますfalse(マッパーごとに 1 つの入力ファイル)。
  2. メソッドも実装する必要がありますgetRecordReader()。これはまさに、上記の解析ロジックを配置する必要があるクラスです。
于 2016-04-24T18:16:51.020 に答える
0

入力はテキスト ファイルから取得されるため、fileInputFormat の isSplitable() メソッドをオーバーライドできます。これを使用すると、1 つのマッパーがファイル全体を処理します。

public boolean isSplitable(Context context,Path args[0]) { return false; }

于 2016-04-25T10:49:11.207 に答える