如何在java中为hadoop作业定义parquetoutputformat的parquet模式?

ui7jx7zq  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(347)

我有一个java的hadoop作业,它有序列输出格式:

job.setOutputFormatClass(SequenceFileOutputFormat.class);

我想用Parquet地板来代替。我试着用天真的方式来设定:

job.setOutputFormatClass(ParquetOutputFormat.class);
ParquetOutputFormat.setOutputPath(job, output);
ParquetOutputFormat.setCompression(job, CompressionCodecName.GZIP);
ParquetOutputFormat.setCompressOutput(job, true);

但在将作业结果写入磁盘时,bob失败了:

Error: java.lang.NullPointerException: writeSupportClass should not be null
    at parquet.Preconditions.checkNotNull(Preconditions.java:38)
    at parquet.hadoop.ParquetOutputFormat.getWriteSupport(ParquetOutputFormat.java:326)

似乎,Parquet地板需要一个模式te设置,但我找不到一个手册或指南,如何在我的情况下这样做。我的 Reducer 类尝试使用 org.apache.hadoop.io.LongWritable 作为一把钥匙 org.apache.mahout.cf.taste.hadoop.EntityEntityWritable 作为一种价值观。
我怎样才能为它定义一个模式?

whlutmcx

whlutmcx1#

你必须为你的工作指定一个“parquet.hadoop.api.writesupport”实现(例如:“parquet.proto.protowritesupport”表示protobuf或“parquet.avro.avrowritesupport”表示avro)

ParquetOutputFormat.setWriteSupportClass(job, ProtoWriteSupport.class);

使用protobuf时,请指定protobufclass:

ProtoParquetOutputFormat.setProtobufClass(job, your-protobuf-class.class);

当使用avro时,引入如下模式:

AvroParquetOutputFormat.setSchema(job, your-avro-object.SCHEMA);

相关问题