0

一部のデータを処理して、それらを別のディレクトリに出力しようとしています。この投稿で受け入れられた回答に従いました(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 テキスト

4

0 に答える 0