2017-02-06 3 views
2

Ich habe nach einer Lösung für diese Frage gesucht.Ist es möglich, Parkett mit Java zu lesen und zu schreiben, ohne von Hadoop und HDFS abhängig zu sein?

Es scheint mir, dass es keine Möglichkeit gibt, das Parkett in einem Java-Programm zu lesen und zu schreiben, ohne Abhängigkeiten von HDFS und Hadoop einzubeziehen. Ist das richtig?

Ich möchte auf einem Clientcomputer außerhalb eines Hadoop-Clusters lesen und schreiben.

Ich begann mich für Apache Drill zu begeistern, aber es scheint, dass es als ein separater Prozess ausgeführt werden muss. Was ich brauche, ist eine In-Process-Fähigkeit, eine Datei mit dem Parquet-Format zu lesen und zu schreiben.

Antwort

3

Sie können Parkett Format Seite Hadoop Cluster mit Java Parquet Client API schreiben.

Hier ist ein Beispielcode in Java, der Parkett-Format auf lokale Festplatte schreibt.

{ 
final String schemaLocation = "/tmp/avro_format.json"; 
final Schema avroSchema = new Schema.Parser().parse(new File(schemaLocation)); 
final MessageType parquetSchema = new AvroSchemaConverter().convert(avroSchema); 
final WriteSupport<Pojo> writeSupport = new AvroWriteSupport(parquetSchema, avroSchema); 
final String parquetFile = "/tmp/parquet/data.parquet"; 
final Path path = new Path(parquetFile); 
ParquetWriter<GenericRecord> parquetWriter = new ParquetWriter(path, writeSupport, CompressionCodecName.SNAPPY, BLOCK_SIZE, PAGE_SIZE); 
final GenericRecord record = new GenericData.Record(avroSchema); 
record.put("id", 1); 
record.put("age", 10); 
record.put("name", "ABC"); 
record.put("place", "BCD"); 
parquetWriter.write(record); 
parquetWriter.close(); 
} 

avro_format.json,

{ 
    "type":"record", 
    "name":"Pojo", 
    "namespace":"com.xx.test", 
    "fields":[ 
     { 
     "name":"id", 
     "type":[ 
      "int", 
      "null" 
     ] 
     }, 
     { 
     "name":"age", 
     "type":[ 
      "int", 
      "null" 
     ] 
     }, 
     { 
     "name":"name", 
     "type":[ 
      "string", 
      "null" 
     ] 
     }, 
     { 
     "name":"place", 
     "type":[ 
      "string", 
      "null" 
     ] 
     } 
    ] 
} 

Hoffnung, das hilft.

+0

OK. Dies funktioniert (unter Windows), wenn ich winutils.exe habe. Ich hätte die Frage anders formulieren sollen. Ich glaube nicht, dass ich winutils.exe verfügbar habe, wo ich das schreiben (und lesen) möchte. Wie auch immer, beantwortet dies (obwohl ich das gelesen werden muss). Vielen Dank. – Jesse

+1

Ich sollte auch hinzufügen, dass ich einige veraltete APIs in Ihrer Antwort gefunden habe. Ich denke, es wird erwartet, dass die Builder für die Erstellung der AvroWriteSupport- und ParquetWriter-Objekte verwendet werden. – Jesse

+0

Ja, die Konstruktoren sind veraltet, nicht die Klasse. Wie du gesagt hast, sollten wir die Erbauer benutzen. – Krishas

Verwandte Themen