是否可以使用Java读取和编写Parquet而不依赖于Hadoop和HDFS?

时间:2017-02-06 22:53:53

标签: java hadoop parquet apache-drill data-formats

我一直在寻找解决这个问题的方法。

在我看来,没有办法在Java程序中嵌入读写Parquet格式而不依赖于HDFS和Hadoop。它是否正确?

我想在Hadoop集群之外的客户端计算机上进行读写。

我开始对Apache Drill感到兴奋,但似乎它必须作为一个单独的进程运行。我需要的是使用Parquet格式读取和写入文件的进程内能力。

1 个答案:

答案 0 :(得分:3)

您可以使用Java Parquet Client API在侧面hadoop集群中编写镶木地板格式。

以下是java中的示例代码,它将镶木地板格式写入本地磁盘。

{
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"
         ]
      }
   ]
}

希望这有帮助。