Java 从阵列中创建拼花地板文件

Java 从阵列中创建拼花地板文件,java,arrays,database,file,parquet,Java,Arrays,Database,File,Parquet,我目前正在努力从一个自建类的数组中创建拼花文件。我正在使用Java1.8 我不知道从哪里开始。已经在StackOverflow和谷歌搜索过了,但没有适合我的答案 我有一个订单数组,其中包含customerID、orderID和OrderItems列表。 OrderItems包含物品ID、金额等信息 有人能给我一个关于如何将这个数组转换成拼花地板数据库文件的快速介绍吗 非常感谢:)代码片段: private void generateParquetFile(List<Order> or

我目前正在努力从一个自建类的数组中创建拼花文件。我正在使用Java1.8

我不知道从哪里开始。已经在StackOverflow和谷歌搜索过了,但没有适合我的答案

我有一个订单数组,其中包含customerID、orderID和OrderItems列表。 OrderItems包含物品ID、金额等信息

有人能给我一个关于如何将这个数组转换成拼花地板数据库文件的快速介绍吗

非常感谢:)

代码片段:

private void generateParquetFile(List<Order> orders){
    //Parse the schema
    Schema schema = parseSchema();
    List<GenericData.Record> recordList = getRecords(schema, orders);
    writeToParquet(recordList,schema);
}

private static void writeToParquet(List<GenericData.Record> recordList, Schema schema) {
    // Path to Parquet file in HDFS
    Path path = new Path("/Users/example/dev/TestRecord.parquet");
    ParquetWriter<GenericData.Record> writer = null;
    // Creating ParquetWriter using builder
    try {
        writer = AvroParquetWriter.
                <GenericData.Record>builder(path)
                .withRowGroupSize(ParquetWriter.DEFAULT_BLOCK_SIZE)
                .withPageSize(ParquetWriter.DEFAULT_PAGE_SIZE)
                .withSchema(schema)
                .withConf(new Configuration())
                .withCompressionCodec(CompressionCodecName.SNAPPY)
                .withValidation(false)
                .withDictionaryEncoding(false)
                .build();

        for (GenericData.Record record : recordList) {
            writer.write(record);
        }

    }catch(IOException e) {
        e.printStackTrace();
    }finally {
        if(writer != null) {
            try {
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

private List<GenericData.Record> getRecords(Schema schema, List<Order> orders) {
    List<GenericData.Record> recordList = new ArrayList<GenericData.Record>();
    GenericData.Record record = new GenericData.Record(schema);

    for (Order order : orders){
        record.put("CustomerNumber", order.getCustomerNumber());
        record.put("OrderNumber", order.getOrderNumber());

        Schema childSchema = record.getSchema().getField("Artikel").schema().getElementType();
        List<GenericRecord> artikelliste = new ArrayList<>();
        GenericRecord artikel = new GenericData.Record(childSchema);

        for(OrderItem item : order.getOrderItems()){
            artikel.put("ArticleNumber", item.getArticleId());
            artikel.put("Amount", item.getAmount());
            artikelliste.add(artikel);

        }

        record.put("Article", artikelliste);

        recordList.add(record);
    }

    return recordList;
}

private static Schema parseSchema(){
    Schema.Parser parser = new Schema.Parser();
    Schema schema = null;
    try {
        //pass path to schema
        schema = parser.parse(new FileInputStream(new File("/Users/example/Documents/avroSchema.avsc")));
    }catch (IOException e){
        e.printStackTrace();
    }
    return schema;
}
private void generateParquetFile(列表顺序){
//解析模式
Schema=parseSchema();
List recordList=getRecords(模式、顺序);
writeToParquet(记录列表、模式);
}
私有静态void writeToParquet(列表记录列表、模式){
//HDFS中拼花地板文件的路径
路径路径=新路径(“/Users/example/dev/TestRecord.parquet”);
ParquetWriter writer=null;
//使用生成器创建ParquetWriter
试一试{
writer=avroparquetwitter。
建筑商(路径)
.withRowGroupSize(拼花书写器默认块大小)
.withPageSize(ParquetWriter.默认页面大小)
.withSchema(schema)
.withConf(新配置())
.withCompressionCodec(CompressionCodecName.SNAPPY)
.withValidation(假)
.withDictionaryEncoding(false)
.build();
用于(GenericData.Record记录:记录列表){
写作(记录);
}
}捕获(IOE异常){
e、 printStackTrace();
}最后{
if(writer!=null){
试一试{
writer.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
}
私有列表getRecords(模式、列表顺序){
List recordList=new ArrayList();
GenericData.Record记录=新的GenericData.Record(模式);
对于(订单:订单){
record.put(“CustomerNumber”,order.getCustomerNumber());
record.put(“OrderNumber”,order.getOrderNumber());
Schema childSchema=record.getSchema().getField(“Artikel”).Schema().getElementType();
List artikeliste=new ArrayList();
GenericRecord artikel=新的GenericData.Record(childSchema);
对于(OrderItem项:order.getOrderItems()){
artikel.put(“ArticleNumber”,item.getArticleId());
artikel.put(“金额”,item.getAmount());
artikelliste.add(artikel);
}
记录。投入(“文章”,artikelliste);
记录列表。添加(记录);
}
返回记录列表;
}
私有静态模式parseSchema(){
Schema.Parser=新Schema.Parser();
Schema=null;
试一试{
//向架构传递路径
schema=parser.parse(新文件inputstream(新文件(“/Users/example/Documents/avroSchema.avsc”));
}捕获(IOE异常){
e、 printStackTrace();
}
返回模式;
}
这是工作表单,至少生成了一个*.parquet文件

我不知道如何检查拼花地板文件是否像我想要的那样生成。 我也不确定它是否已经用snappy压缩了?因为我正在给拼花匠一个Snappy类型的压缩编解码器


也许有人已经做了类似的事情,可以帮助我吗?

能否提供一段代码,以便有人可以复制并帮助您。