首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有可能在不依赖Hadoop和HDFS的情况下使用Java读写Parquet?

有没有可能在不依赖Hadoop和HDFS的情况下使用Java读写Parquet?
EN

Stack Overflow用户
提问于 2017-02-07 06:53:53
回答 1查看 7.2K关注 0票数 7

我一直在寻找这个问题的答案。

在我看来,如果不引入对HDFS和Hadoop的依赖,就无法在Java程序中嵌入、读写Parquet格式。这是正确的吗?

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-14 18:53:58

您可以在hadoop集群外部使用java parquet客户端API编写Parquet格式。

这是一个用java编写的示例代码,它将parquet格式写入本地磁盘。

代码语言:javascript
运行
复制
import org.apache.avro.Schema;
import org.apache.avro.generic.GenericData;
import org.apache.avro.generic.GenericRecord;
import org.apache.hadoop.fs.Path;
import org.apache.parquet.avro.AvroSchemaConverter;
import org.apache.parquet.avro.AvroWriteSupport;
import org.apache.parquet.hadoop.ParquetWriter;
import org.apache.parquet.hadoop.metadata.CompressionCodecName;
import org.apache.parquet.schema.MessageType;

public class Test {
    void test() throws IOException {
        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,

代码语言:javascript
运行
复制
{
   "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"
         ]
      }
   ]
}

希望这能有所帮助。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42078757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档