使用AvroParquetInputFormat将镶木地板读入Google DataFlow

时间:2017-01-28 17:49:31

标签: avro google-cloud-dataflow parquet

尝试将简单的Parquet文件读入我的Google DataFlow管道

使用以下代码

127.0.0.1 example.com

在运行管道时始终触发以下异常

IllegalStateException:找不到类org.apache.avro.generic.GenericData的编码器

似乎HadoopFileSource中的这个方法无法像编码器一样处理这种类

Read.Bounded<KV<Void, GenericData>> results = HadoopFileSource.readFrom("/home/avi/tmp/db_demo/simple.parquet", AvroParquetInputFormat.class, Void.class, GenericData.class);

}

任何帮助将不胜感激

阿维

1 个答案:

答案 0 :(得分:0)

HadoopFileSource的设计存在问题。我建议转移到apache-beam或(scio)这是apache&#34;版本&#34; (以及数据流sdk的未来&#34;)。一旦你在光束上,你可以:

这将是scala(但你可以很容易地翻译成java):

HDFSFileSource.from(
  input,
  classOf[AvroParquetInputFormat[AvroSchemaClass]],
  AvroCoder.of(classOf[AvroSchemaClass]),
  new SerializableFunction[KV[Void, AvroSchemaClass], AvroSchemaClass]() {
    override def apply(e: KV[Void, AvroSchemaClass]): AvroSchemaClass =
      CoderUtils.clone(AvroCoder.of(classOf[AvroSchemaClass]), e.getValue)
  }
)

这是from的替代版本,接受coder