2017-09-22 39 views
1

我正在使用基於Java(1.8)的應用程序使用庫創建鑲木地板文件 org.apache.avro.Schema和org.apache.parquet.hadoop。 ParquetWriter等。如何在鑲木地板文件中創建日期類型列與鑲木地板

這是我的示例代碼

最後字符串的schemaLocation = ParquerWriterImpl.class.getClassLoader()。的getResource( 「拼花架構/」 + ParquetTypes.RISKINFO.getFileType())。的getPath() ;

 Schema avroSchema = new Schema.Parser().parse(new File(schemaLocation)); 

     final MessageType parquetSchema = new AvroSchemaConverter().convert(avroSchema); 
     final WriteSupport<Mapper> writeSupport = new AvroWriteSupport(parquetSchema, avroSchema); 
     final String parquetPath = PropertyLoader.getPropertyLoader().getProperty(Constants.PROPERTY_MACHINE_FOLDERPATH) + "/" + 
       parquetFileName; 
     final Path path = new Path(parquetPath); 
     ParquetWriter<GenericRecord> parquetWriter = new ParquetWriter(path, writeSupport, CompressionCodecName.SNAPPY, BLOCK_SIZE, 1024); 
     final GenericRecord record = new GenericData.Record(avroSchema); 
     parquetWriter.write(function.apply(new RiskInfoGen(record))); 
     parquetWriter.close(); 

創建此文件我正在使用像下面的Avro架構。

}, 
    { 
    "name": "additional", 
    "type": {"type": "map", "values": "string","default" : null} 

    }, 

    { 
    "name": "mydate", 
    "type": {"type": "int", "logicalType" : "date"} 

    } 

在POJO類我將「mydate」映射到Java int類型。

問題1 儘管我在這裏得到實木複合文件,打開該文件後spark,「mydate」列顯示爲int類型不是預期的日期類型。

請讓我知道如何使這個「mydate」作爲實木複合模式中的日期列。

e.g指明MyDate日期(可空真)

回答

0

我有同樣的問題。我用Parquet-Avro 1.8.1

切換到1.9.0固定對我來說:

{"name": "birth_date", "type": [{"type": "int", "logicalType" : "date"}, "null"]}" 

我設定值:

record.put("birth_date", 1); 

而且它顯示爲1970年1月2日在 apache spark數據框。

相關問題