我正在使用protobuf(或Avro)写作镶木地板文件。我的proto文件看起来像这样:
message Log {
optional string date = 1;
optional string url = 2;
}
它是我的问题的简化版本。现在写入镶木地板文件(Non-hadoop)时,我希望有一个案例,其中一个列根本没有数据(我正在进行模式演变)。所以我只是在为' date'镶木地板文件中的列。文件已成功创建,但是当我尝试通过apache drill查询它时,它会抛出一个nullpointer异常。如果至少对于其中一个书面记录,我设置了“url'字段,然后它是好的,所有其他的' url' value可以为null,钻取可以查询它。但我需要在镶木地板文件中整个列为空(但其他镶木地板文件具有该列的值)的情况。请帮帮我们。 我的拼花版是:1.6.0rc7和apache钻版是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();