2017-09-22 28 views
1

J'utilise une application Java (1.8) pour créer un fichier parquet avec des bibliothèques org.apache.avro.Schema et org.apache.parquet.hadoop. ParquetWriter etc ..comment créer une colonne de type date dans un fichier parquet avec parquet-avro

Ceci est mon exemple de code

getPath() final String = schemaLocation ParquerWriterImpl.class.getClassLoader(). getResource ("parquet-schéma /" + ParquetTypes.RISKINFO.getFileType()). ;

 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(); 

pour créer ce fichier J'utilise le schéma Avro comme ci-dessous.

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

    }, 

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

    } 

dans la classe POJO Je suis mappage "mydate" au type int Java.

Question 1 Bien que j'obtienne le dossier de parquet ici, après l'ouverture de ce dossier avec l'étincelle, la colonne "mydate" montrant comme le type de int type de date non attendu. S'il vous plaît laissez-moi savoir comment faire de ce "mydate" comme colonne de date dans le schéma du parquet.

Date mydate par exemple (de nullable vrai)

Répondre

0

J'ai eu le même problème. J'utilisais Parquet-Avro 1.8.1

Passage à 1.9.0 fixe pour moi:

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

Je tournai la valeur:

record.put("birth_date", 1); 

Et il apparaît comme 02/01/1970 dans données d'étincelles d'apache.