在java中创建镶木地板文件
有没有办法从java创建镶木地板文件?
我在内存(java类)中有数据,我想把它写到一个镶木地板文件中,以便以后从apache-drill读取它。
有没有一种简单的方法来做到这一点,比如将数据插入到sql表中?
明白了
感谢您的帮助。
结合答案和这个链接,我能够创建一个镶木地板文件,并用钻头读回去。
有没有办法从java创建镶木地板文件?
我在内存(java类)中有数据,我想把它写到一个镶木地板文件中,以便以后从apache-drill读取它。
有没有一种简单的方法来做到这一点,比如将数据插入到sql表中?
明白了
感谢您的帮助。
结合答案和这个链接,我能够创建一个镶木地板文件,并用钻头读回去。
ParquetWriter的构造函数已被弃用(1.8.1),但不是ParquetWriter本身,您仍然可以通过在其内部扩展抽象Builder子类来创建ParquetWriter。
这里有一个来自镶木地板创作者自己的例子 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);
}
}
如果您不想使用Group和GroupWriteSupport(捆绑在Parquet中,但仅用作数据模型实现的示例),则可以使用Avro,Protocol Buffers或Thrift内存数据模型。下面是使用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);
}
}
您将需要以下依赖项:
<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>
此处为完整示例。
几种可能的方法:
text_table
parquet_table
insert into parquet_table select * from text_table