Est-il possible de créer des fichiers de parquet à partir de java?
J'ai des données en mémoire (classes Java) et je veux les écrire dans un fichier parquet, pour les lire plus tard à partir d'Apache-drill.
Existe-t-il un moyen simple de procéder, comme insérer des données dans une table SQL?
JE L'AI
Merci pour l'aide.
En combinant les réponses et ce link , j'ai pu créer un fichier de parquet et le relire avec un exercice.
Les constructeurs de ParquetWriter sont obsolètes (1.8.1) mais pas ParquetWriter lui-même, vous pouvez toujours créer ParquetWriter en développant la sous-classe abstract Builder à l'intérieur de celle-ci.
Voici un exemple des créateurs de parquet eux-mêmes ExampleParquetWriter :
public static class Builder extends ParquetWriter.Builder<Group, Builder> {
private MessageType type = null;
private Map<String, String> extraMetaData = new HashMap<String, String>();
private Builder(Path file) {
super(file);
}
public Builder withType(MessageType type) {
this.type = type;
return this;
}
public Builder withExtraMetaData(Map<String, String> extraMetaData) {
this.extraMetaData = extraMetaData;
return this;
}
@Override
protected Builder self() {
return this;
}
@Override
protected WriteSupport<Group> getWriteSupport(Configuration conf) {
return new GroupWriteSupport(type, extraMetaData);
}
}
Si vous ne souhaitez pas utiliser Group et GroupWriteSupport (fournis dans Parquet mais uniquement à titre d'exemple d'implémentation de modèle de données), vous pouvez utiliser des modèles de données Avro, Protocol Buffers ou Thrift en mémoire. Voici un exemple utilisant l’écriture de Parquet avec Avro:
try (ParquetWriter<GenericData.Record> writer = AvroParquetWriter
.<GenericData.Record>builder(fileToWrite)
.withSchema(schema)
.withConf(new Configuration())
.withCompressionCodec(CompressionCodecName.SNAPPY)
.build()) {
for (GenericData.Record record : recordsToWrite) {
writer.write(record);
}
}
Vous aurez besoin de ces dépendances:
<dependency>
<groupId>org.Apache.parquet</groupId>
<artifactId>parquet-avro</artifactId>
<version>1.8.1</version>
</dependency>
<dependency>
<groupId>org.Apache.parquet</groupId>
<artifactId>parquet-hadoop</artifactId>
<version>1.8.1</version>
</dependency>
Exemple complet ici .
Quelques façons possibles de le faire:
text_table
. Voir Impala's Créer une déclaration de table pour plus de détails.parquet_table
.insert into parquet_table select * from text_table
pour copier toutes les données du fichier texte dans la table de parquet.