问:在内存中将 Avro 转换为 Parquet

use*_*071 6 java hadoop avro parquet

我正在从 Kafka 接收 Avro 记录。我想将这些记录转换为 Parquet 文件。我正在关注这篇博客文章:http://blog.cloudera.com/blog/2014/05/how-to-convert-existing-data-into-parquet/

到目前为止,代码大致如下所示:

final String fileName
SinkRecord record, 
final AvroData avroData

final Schema avroSchema = avroData.fromConnectSchema(record.valueSchema());
CompressionCodecName compressionCodecName = CompressionCodecName.SNAPPY;

int blockSize = 256 * 1024 * 1024;
int pageSize = 64 * 1024;

Path path = new Path(fileName);
writer = new AvroParquetWriter<>(path, avroSchema, compressionCodecName, blockSize, pageSize);
Run Code Online (Sandbox Code Playgroud)

现在,这将执行 Avro 到 Parquet 的转换,但会将 Parquet 文件写入磁盘。我想知道是否有一种更简单的方法将文件保留在内存中,这样我就不必管理磁盘上的临时文件。谢谢

Kri*_*has 0

"but it will write the Parquet file to the disk"
"if there was an easier way to just keep the file in memory"
Run Code Online (Sandbox Code Playgroud)

从您的查询中,我了解到您不想将部分文件写入镶木地板。如果您希望将完整文件以 parquet 格式写入磁盘并将临时文件写入内存,则可以结合使用内存映射文件和 parquet 格式。

将数据写入内存映射文件,写入完成后将字节转换为镶木地板格式并存储到磁盘。

看看MappedByteBuffer