Azure Cost Exports - Java 中的 Parquet 格式解析

问题描述 投票:0回答:1

我已将天蓝色成本数据以 parquet 格式导出到存储帐户。解析该文件时,将数据输出为 GenericData$Fixed(以字节为单位)。我不知道如何从中获取原始值。

我尝试了 toString() 也返回相同的结果。尝试了 BigInteger 也不起作用

数据类型为 org.apache.avro.generic.GenericData$Fixed 我的代码是

ParquetReader<GenericRecord> reader = null;
        InputStream in = null;
        
        try
        {
            in = new FileInputStream(new File("part_1_0001.parquet"));
            
            ParquetStream parquetStream = new ParquetStream(String.valueOf(System.currentTimeMillis()), in);
            
            ParquetConfiguration conf = new PlainParquetConfiguration();
            conf.set(org.apache.parquet.avro.AvroReadSupport.READ_INT96_AS_FIXED, "true");
            
            reader = AvroParquetReader
                    .<GenericRecord>builder(parquetStream,conf)
                    .build();

            GenericRecord record;
            
            while ((record = reader.read()) != null) 
            {
                Object fieldValue = record.get(42); 
              // fieldValueOutput - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 121, -61, -40, 0]
                
            }
                    
        }
        catch(Exception e)
        {
...
        }
        finally
        {
            if(reader != null)
            {
                try
                {
                    reader.close();
                }
                catch(Exception e)
                {
                    ...
                }
            }
            if(in!=null)
            {
                try
                {
                    in.close(); 
                }
                catch(Exception e)
                {
                    ...
                }
            }
        }

任何人指导我从中获得原始价值。

java azure parquet avro
1个回答
0
投票

Azure Cost Exports - Java 中的 Parquet 格式解析

我同意OneCricketeer的评论,你可以使用

Spark
。它将自动解码 Parquet 模式,包括 Avro 字段等复杂类型,而无需您手动解码字节数组。

这里是使用 java 使用 Spark 和 scala 读取 parquet 文件的代码。

代码:

import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;

public class App {
    public static void main(String[] args) {
        // Initialize Spark session
        SparkSession spark = SparkSession.builder()
                .appName("Parquet Reader")
                .master("local[*]")
                .getOrCreate();

        // Read the Parquet file into a DataFrame
        Dataset<Row> df = spark.read().parquet("data.parquet");
        df.printSchema();
        df.show();
        df.select("your_field_name").show();
        spark.stop();
    }
}

输出:

root
 |-- column0: string (nullable = true)
 |-- column1: string (nullable = true)

+---------+--------+
|  column0| column1|
+---------+--------+
|    first|    last|
|    Jorge|   Frank|
|   Hunter|  Moreno|
|   Esther|  Guzman|
|   Dennis|Stephens|
|   Nettie|Franklin|
|  Stanley|  Gibson|
|  Eugenia|   Greer|
|  Jeffery| Delgado|
|    Clara|   Cross|
|  Bernice|    Vega|
|    Kevin|    Diaz|
|Henrietta|  Rivera|
|  Matilda|   Ellis|
|    Isaac|  Willis|
|     Eric|    Cain|
|   Hettie| Baldwin|
|    Tommy| Wheeler|
|  Theresa|   Casey|
|     Bess| Griffin|
+---------+--------+
only showing top 20 rows

+---------+
|  column0|
+---------+
|    first|
|    Jorge|
|   Hunter|
|   Esther|
|   Dennis|
|   Nettie|
|    first|
|    Jorge|
|   Hunter|
|   Esther|
|   Dennis|

+---------+
only showing top 20 rows

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.