Java 使用map reduce作业将Hdfs文本文件转换为拼花地板格式

Java 使用map reduce作业将Hdfs文本文件转换为拼花地板格式,java,mapreduce,parquet,Java,Mapreduce,Parquet,我正在尝试使用java中的map reduce将hdfs文本文件转换为拼花地板格式。老实说,我是这方面的新手,无法找到任何直接的参考 转换是否应为textfile-->avro-->parquet 文本文件(无论是否为HDFS)没有固有的文件格式。使用Map/Reduce时,需要一个Avro模式和一个mapper函数来解析输入,以便创建一个映射 您的mapper类将如下所示 public class TextToAvroParquetMapper extends Mapper&l

我正在尝试使用java中的map reduce将hdfs文本文件转换为拼花地板格式。老实说,我是这方面的新手,无法找到任何直接的参考

转换是否应为textfile-->avro-->parquet

文本文件(无论是否为HDFS)没有固有的文件格式。使用Map/Reduce时,需要一个Avro模式和一个mapper函数来解析输入,以便创建一个映射

您的mapper类将如下所示

public class TextToAvroParquetMapper
        extends Mapper<LongWritable, Text, Void, GenericRecord> {
    private GenericRecord myGenericRecord = new GenericData.Record(mySchema);

    @Override
    protected void map(LongWritable key, Text value, Context context) {
          // Parse the value yourself here,
          // calling "put" on the Avro GenericRecord,
          // once for each field.  The GenericRecord
          // object is reused for every map call.
          context.write(null, myGenericRecord);
    }
}
将输出格式类设置为
Parquet
AvroParquetOutputFormat
类,它将创建的
Avro
转换为
Parquet
列格式。它需要知道你的想法

由于
AvroParquetOutputFormat
将Avro
genericord
转换为拼花
Group
对象,因此需要将输出值类设置为
Group
(输出键类设置为
Void
,因为所有键都是
null

是的,转换为textfile->Avro->Parquet。您的
map
方法控制从文本文件到Avro的转换,并且
AvroParquetOutputFormat
处理从Avro到拼花地板的转换

job.setNumReduceTasks(0);
job.setOutputFormatClass(AvroParquetOutputFormat.class);
AvroParquetOutputFormat.setSchema(job, myAvroSchema);
job.setOutputKeyClass(Void.class);
job.setOutputValueClass(Group.class);