Json 使用 Java 对象到 Parquet 格式而不转换为 AVRO(不使用 Spark、Hive、Pig,Impala)
Json object to Parquet format using Java without converting to AVRO(Without using Spark, Hive, Pig,Impala)
我有一个方案,使用 Java 将作为 Json 对象存在的消息转换为 Apache Parquet 格式。任何示例代码或示例都会有所帮助。就我发现将消息转换为 Parquet 而言,正在使用 Hive、Pig、Spark。我需要仅通过 Java.
转换为 Parquet 而不涉及这些
要将 JSON 数据文件转换为 Parquet,您需要一些内存表示。 Parquet 没有自己的 Java 对象集;相反,它重用了其他格式的对象,例如 Avro 和 Thrift。这个想法是 Parquet 原生地与您的应用程序可能已经使用的对象一起工作。
要转换您的 JSON,您需要将记录转换为 Avro 内存中对象 并将其传递给 Parquet,但您不需要转换一个文件到 Avro,然后到 Parquet。
Avro 对象的转换已经为您完成,请参阅 Kite's JsonUtil, and is ready to use as a file reader. The conversion method needs an Avro schema, but you can use that same library to infer an Avro schema from JSON data。
要写那些记录,你只需要使用ParquetAvroWriter
。整个设置如下所示:
Schema jsonSchema = JsonUtil.inferSchema(fs.open(source), "RecordName", 20);
try (JSONFileReader<Record> reader = new JSONFileReader<>(
fs.open(source), jsonSchema, Record.class)) {
reader.initialize();
try (ParquetWriter<Record> writer = AvroParquetWriter
.<Record>builder(outputPath)
.withConf(new Configuration)
.withCompressionCodec(CompressionCodecName.SNAPPY)
.withSchema(jsonSchema)
.build()) {
for (Record record : reader) {
writer.write(record);
}
}
}
我遇到了同样的问题,据我所知,在不使用 avro 或其他框架的情况下,没有多少样本可用于 parquet write。最后我选择了 Avro。 :)
看看,可能对你有帮助。
我有一个方案,使用 Java 将作为 Json 对象存在的消息转换为 Apache Parquet 格式。任何示例代码或示例都会有所帮助。就我发现将消息转换为 Parquet 而言,正在使用 Hive、Pig、Spark。我需要仅通过 Java.
转换为 Parquet 而不涉及这些要将 JSON 数据文件转换为 Parquet,您需要一些内存表示。 Parquet 没有自己的 Java 对象集;相反,它重用了其他格式的对象,例如 Avro 和 Thrift。这个想法是 Parquet 原生地与您的应用程序可能已经使用的对象一起工作。
要转换您的 JSON,您需要将记录转换为 Avro 内存中对象 并将其传递给 Parquet,但您不需要转换一个文件到 Avro,然后到 Parquet。
Avro 对象的转换已经为您完成,请参阅 Kite's JsonUtil, and is ready to use as a file reader. The conversion method needs an Avro schema, but you can use that same library to infer an Avro schema from JSON data。
要写那些记录,你只需要使用ParquetAvroWriter
。整个设置如下所示:
Schema jsonSchema = JsonUtil.inferSchema(fs.open(source), "RecordName", 20);
try (JSONFileReader<Record> reader = new JSONFileReader<>(
fs.open(source), jsonSchema, Record.class)) {
reader.initialize();
try (ParquetWriter<Record> writer = AvroParquetWriter
.<Record>builder(outputPath)
.withConf(new Configuration)
.withCompressionCodec(CompressionCodecName.SNAPPY)
.withSchema(jsonSchema)
.build()) {
for (Record record : reader) {
writer.write(record);
}
}
}
我遇到了同样的问题,据我所知,在不使用 avro 或其他框架的情况下,没有多少样本可用于 parquet write。最后我选择了 Avro。 :)
看看