我是一名从Kafka消费avro数据的java Kafka消费者[说主题x]。它应该将这些数据推送到HDFS,因为它没有代码生成。在avro documentation中,他们会使用以下内容:
GenericRecord e1 = new GenericData.Record(schema);
e1.put("key", "value");
DatumWriter<GenericRecord> datumWriter = new GenericDatumWriter<GenericRecord>(schema);
DataFileWriter<GenericRecord> dataFileWriter = new DataFileWriter<GenericRecord>(datumWriter);
dataFileWriter.create(schema, new File("<HDFS file path>"));
dataFileWriter.append(e1);
dataFileWriter.close();
问题是,我已经有了avro数据。要使用这一系列步骤,我必须在反序列化avro数据包后提取每个键值对,然后将其推送到GenericRecord对象,我认为没有任何意义。我没有找到任何我想要实现的例子。非常感谢任何有关文档的提示或链接。
答案 0 :(得分:0)
如果我理解你的问题,我建议您尝试使用com.twitter.bijection.Injection和com.twitter.bijection.avro.GenericAvroCodecs包。
看看http://aseigneurin.github.io/2016/03/04/kafka-spark-avro-producing-and-consuming-avro-messages.html。 在那里,在Kafka生产者中,GenericRecord被转换为bytes [],它们放在Kafka主题中,然后在消费者中,这个字节根据你的模式被反转成GenericRecord。而且您不需要将值放在记录中的所有字段中。之后,您可以将此记录写入文件。
而且,您可能还需要以其他方式访问HDFS中的文件,因为您无法为其创建File实例。