gpt4 book ai didi

java - 在 Java 中从 Parquet 文件中读取小数字段

转载 作者:行者123 更新时间:2023-11-30 06:40:43 38 4
gpt4 key购买 nike

我读取了一个 Parquet 文件,如下所示,

Builder<GenericRecord> builder = AvroParquetReader.builder(path);
ParquetReader<GenericRecord> reader = builder.build();

GenericRecord record = null;
while((record = reader.read()) != null) {
System.out.println(record.toString());
}

输出:

{"var1": "ABCD", "var2": "1234567", "var3": [0, 0, 0, 0, 0, 0, 0, 0, 113, 15, 120, -111, -92, -114, -112, 50]}

我尝试对字节数组值执行的任何类型转换

(byte[]) record.get("var3")

抛出

java.lang.ClassCastException: org.apache.avro.generic.GenericData$Fixed cannot be cast to [B

如何将此 GenericData 转换回 Decimal?

Parquet 文件架构:

-bash-4.1$ parquet-tools schema my-parquet-file.gz.parquet
message spark_schema {
optional binary var1 (UTF8);
optional int64 var2;
optional fixed_len_byte_array(16) var3 (DECIMAL(38,8));
}

最佳答案

能够使用较新版本的 avro 来做到这一点 ( Documentation )

public BigDecimal fromFixed(GenericFixed value,
Schema schema,
LogicalType type)

正是我所需要的。

关于java - 在 Java 中从 Parquet 文件中读取小数字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44417949/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com