一部のデータを処理して、それらを別のディレクトリに出力しようとしています。この投稿で受け入れられた回答に従いました(MultipleOutputsを使用): 出力を異なるフォルダーに書き込むhadoop
ただし、複数のディレクトリを作成すると、出力ファイルは空になります (ディレクトリとファイルは引き続き作成されます)。スラッシュ (同じディレクトリ内の異なるファイルのみ) を削除すると、ファイルには期待されるデータが含まれます。
どんな助けでも大歓迎です。
コードのスナップショット:
メイン関数では:
while ((ll = br.readLine())!= null)
{
for (Type v:values)
MultipleOutputs.addNamedOutput(conf, "./"+ll+"/"+v.toString()+"/"+ll, TextOutputFormat.class, Text.class, NullWritable.class);
}
Reduce クラス:
public static class Reduce extends MapReduceBase implements Reducer<Text, Text, Text, NullWritable> {
private MultipleOutputs mos;
public void configure (JobConf context)
{
mos = new MultipleOutputs(context);
}
public void reduce(Text key, Iterator<Text> values, OutputCollector<Text, NullWritable> output, Reporter reporter) throws IOException {
while (values.hasNext())
mos.getCollector(key.toString(),
reporter).collect(values.next(),
NullWritable.get());
}
}
渡されたキーは、namedoutput と同じ形式になるように生成されます。
「/」と「.」を許可するために、MultipleOutputs に 1 行だけ追加しました。
if ((ch=='/') || (ch =='.')) continue;
checkTokenName function.strong テキスト