2

私にも同様の要件があります。いくつかのスキーマを持つ avro レコードを読み取り、テキスト データ型のキー値を出力したいのですが、このために MR ユニットのテスト ケースを作成する必要があります。次のコードを書きましたが、次の例外が発生しています。

   org.apache.avro.AvroTypeException: Found string, expecting xyz.abc.Myschema
   at org.apache.avro.io.ResolvingDecoder.doAction(ResolvingDecoder.java:231)
   at org.apache.avro.io.parsing.Parser.advance(Parser.java:88)
   .....
   .....

以下は、セットアップ機能の私のコードベースです。

MyMapper myMapper = new MyMapper();
    mapDriver = new MapDriver<AvroKey<Myschema>, NullWritable, Text, Text>();
    mapDriver.setMapper(myMapper);
    Configuration configuration = mapDriver.getConfiguration();
    //Copy over the default io.serializations. If you don't do this then you will
    //not be able to deserialize the inputs to the mapper
    String[] strings = mapDriver.getConfiguration().getStrings("io.serializations");
    String[] newStrings = new String[strings.length +1];
    System.arraycopy( strings, 0, newStrings, 0, strings.length );
    newStrings[newStrings.length-1] = AvroSerialization.class.getName();

    //Now you have to configure AvroSerialization by sepecifying the key
    //writer Schema and the value writer schema.
    configuration.setStrings("io.serializations", newStrings);
    Text x = new Text();

    Configuration conf = mapDriver.getConfiguration();
    AvroSerialization.addToConfiguration(conf);
    AvroSerialization.setKeyWriterSchema(conf, Schema.create(Schema.Type.STRING));

    AvroSerialization.setKeyReaderSchema(conf, new Myschema().getSchema());

    Job job = new Job(conf);
    job.setMapperClass(MyMapper.class);
    job.setInputFormatClass(AvroKeyInputFormat.class);
    AvroJob.setInputKeySchema(job, new Myschema().getSchema());
    job.setOutputKeyClass((new Text()).getClass());

Myschema スキーマを持つ avro ベースのレコードを読み取り、テキスト データ型を持つキーと値のペアを発行する必要があります。以下は私のマッパークラスです:

    public class MyMapper extends Mapper<AvroKey<Myschema>, NullWritable, Text, Text>...

    protected void map(AvroKey<Myschema> key, NullWritable value, Context context)...

不足している構成パラメーターがあるかどうかを確認して、助けてもらえますか?

4

0 に答える 0