3

我正在使用 protobuf(或 Avro)写入镶木地板文件。我的原型文件如下所示:

message Log  {
    optional string date = 1;
    optional string url = 2;
}

这是我的问题的简化版本。现在,当写入镶木地板文件(非 hadoop)时,我希望有一种情况,其中一列根本没有数据(我正在研究模式演变)。所以我只是在镶木地板文件中为“日期”列写值。文件已成功创建,但是当我尝试通过 apache Drill 查询它时,它会引发空指针异常。如果至少对于一个书面记录,我设置了'url'字段,那么就可以了,所有其他'url'值都可以为空,并且可以查询它。但是我需要在 parquet 文件中整列为空的情况(但其他 parquet 文件具有该列的值)。请帮帮我。我的镶木地板版本是:1.6.0rc7 和 apache Drill 版本是 0.8.0 这里是代码:LogClass 是从 proto 文件编译的类

MessageType parquetSchema = new   ProtoSchemaConverter().convert(LogClass.Log.class);`

ProtoWriteSupport writeSupport = new  ProtoWriteSupport(LogClass.Log.class);

CompressionCodecName compressionCodecName = CompressionCodecName.SNAPPY;

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

Path outputPath = new Path("./my.parquet");

ParquetWriter parquetWriter = new ParquetWriter(outputPath,    writeSupport, compressionCodecName, blockSize, pageSize);`

LogClass.Log.Builder log = LogClass.Log.newBuilder();
log.setUrl("www.x.com");

for (int i=0; i < 20; i++)
    parquetWriter.write(log);
parquetWriter.close();
4

0 回答 0