0

コンマ区切りファイルの読み取り/処理に KeyValueTextInputFormat を使用しています。

100,56
89,586
123,68

ただし、キーのすべての値を取得します。セパレーターをコンマ (,) として指定した後でも、値フィールドは null になります。セパレーターを選択していません。何が問題なのかわかりません。ここに私のドライバーコードがあります:

    Configuration conf = new Configuration();
    conf.set("key.value.separator.in.input.line", ",");
    Job job = new Job(conf, "citation data");
    job.setJarByClass(Citation.class);
    job.setJobName("citation data");
    job.setMapperClass(MapClass.class);
    job.setReducerClass(ReduceClass.class);
    job.setInputFormatClass(KeyValueTextInputFormat.class);

    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(Text.class);
    KeyValueTextInputFormat.addInputPath(job, new Path("input/sample.txt"));
    FileOutputFormat.setOutputPath(job, new Path("output2"));

    System.exit(job.waitForCompletion(true)?0:1);
4

1 に答える 1

0

それは私にとって完全にうまく機能します。mapred コードの 1 つで、次のように変更しただけで機能しました。

  1. 使用する InputFormatClass を変更しましたKeyValueTextInputFormat
  2. 構成を追加しました-conf.set("key.value.separator.in.input.line", ",");
  3. マッパーが のような外観になっていることを確認してくださいMapper<Text,Text,K,V>。これにより、 map() メソッドのシグネチャが次のようになります。

public void map(テキストキー、テキスト値、OutputCollector 出力、Reporter レポーター) が IOException {} をスローします。

他の変更は必要なく、最初の列のデータをキーとして取得し、2 番目の列をとして取得する必要があります。

あなたが見逃したかもしれない唯一のものはポイント3だと思います.

于 2013-02-21T19:04:57.137 に答える