繁体   English   中英

将自定义Java对象写入Parquet

[英]Writing custom java objects to Parquet

我有一些自定义java对象(内部由其他自定义对象组成)。 我希望以镶木地板格式将这些内容写入HDFS。

即使经过大量的搜索,大多数建议似乎都是使用avro格式和来自镶木地板的内部AvroConverter来存储对象。

看到这里这里 ,我似乎必须编写一个自定义的WriterSupport来实现这一目标。

有一个更好的方法吗? 哪个更优,直接编写自定义对象或使用像Avro这样的中间模式定义?

您可以使用Avro反射来获取架构。 它的代码就像ReflectData.AllowNull.get().getSchema(CustomClass.class) 我有一个示例Parquet演示代码片段。

本质上,自定义Java对象编写器是这样的:

    Path dataFile = new Path("/tmp/demo.snappy.parquet");

    // Write as Parquet file.
    try (ParquetWriter<Team> writer = AvroParquetWriter.<Team>builder(dataFile)
            .withSchema(ReflectData.AllowNull.get().getSchema(Team.class))
            .withDataModel(ReflectData.get())
            .withConf(new Configuration())
            .withCompressionCodec(SNAPPY)
            .withWriteMode(OVERWRITE)
            .build()) {
        for (Team team : teams) {
            writer.write(team);
        }
    }

您可以使用自定义Java类替换Team 您可以看到Team类包含Person对象列表,这与您的要求类似。 而且Avro可以毫无问题地获得架构。

如果要写入HDFS,可能需要用HDFS格式替换路径。 但我没有亲自尝试。

顺便说一句,我的代码的灵感来自这个镶木地板示例代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM