簡體   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