How to read and write Map from/to parquet file in Java or Scala?

前端 未结 3 877
迷失自我
迷失自我 2021-01-04 07:10

Looking for a concise example on how to read and write Map from/to parquet file in Java or Scala?

Here is expected structure, usin

3条回答
  •  挽巷
    挽巷 (楼主)
    2021-01-04 07:27

    i'm not quite good about parquet but, from here:

    Schema schema = new Schema.Parser().parse(Resources.getResource("map.avsc").openStream());
    
        File tmp = File.createTempFile(getClass().getSimpleName(), ".tmp");
        tmp.deleteOnExit();
        tmp.delete();
        Path file = new Path(tmp.getPath());
    
        AvroParquetWriter writer = 
            new AvroParquetWriter(file, schema);
    
        // Write a record with an empty map.
        ImmutableMap emptyMap = new ImmutableMap.Builder().build();
        GenericData.Record record = new GenericRecordBuilder(schema)
            .set("mymap", emptyMap).build();
        writer.write(record);
        writer.close();
    
        AvroParquetReader reader = new AvroParquetReader(file);
        GenericRecord nextRecord = reader.read();
    
        assertNotNull(nextRecord);
        assertEquals(emptyMap, nextRecord.get("mymap"));
    

    In your situation change ImmutableMap (Google Collections) with a default Map as below:

    Schema schema = new Schema.Parser().parse( Resources.getResource( "map.avsc" ).openStream() );
    
            File tmp = File.createTempFile( getClass().getSimpleName(), ".tmp" );
            tmp.deleteOnExit();
            tmp.delete();
            Path file = new Path( tmp.getPath() );
    
            AvroParquetWriter writer = new AvroParquetWriter( file, schema );
    
            // Write a record with an empty map.
            Map emptyMap = new HashMap();
    
            // not empty any more
            emptyMap.put( "SOMETHING", new SOMETHING() );
            GenericData.Record record = new GenericRecordBuilder( schema ).set( "mymap", emptyMap ).build();
            writer.write( record );
            writer.close();
    
            AvroParquetReader reader = new AvroParquetReader( file );
            GenericRecord nextRecord = reader.read();
    
            assertNotNull( nextRecord );
            assertEquals( emptyMap, nextRecord.get( "mymap" ) );
    

    I didn't test the code, but give it a try..

提交回复
热议问题