gpt4 book ai didi

hadoop - RCFile-发出GZip压缩的int列

转载 作者:行者123 更新时间:2023-12-02 21:52:46 26 4
gpt4 key购买 nike

由于某些原因,Hive无法识别以整数形式发出的列,但会识别以字符串形式发出的列。

Hive或RCFile或GZ是否存在阻止int正确渲染的问题?

我的Hive DDL看起来像:

create external table if not exists db.table (intField int, strField string) stored as rcfile location '/path/to/my/data';

Java的相关部分如下所示:
BytesRefArrayWritable dataWrite = new BytesRefArrayWritable(2);
byte[] byteArray;
BytesRefWritable bytesRefWritable = new BytesRefWritable(); intWritable.set(myObj.getIntField());
byteArray = WritableUtils.toByteArray(intWritable.get());
bytesRefWritable.set(byteArray, 0, byteArray.length);
dataWrite.set(0, bytesRefWritable); // sets int field as column 0


bytesRefWritable = new BytesRefWritable();
textWritable.set(myObj.getStrField());
bytesRefWritable.set(textWritable.getBytes(), 0, textWritable.getLength());
dataWrite.set(1, bytesRefWritable); // sets str field as column 1

代码运行良好,通过记录,我可以看到各种 Writables中都有字节。

Hive也可以读取外部表,但是 int字段显示为 NULLindicating some error
SELECT * from db.table;

OK
NULL my string field
Time taken: 0.647 seconds

知道这里可能会发生什么吗?

最佳答案

因此,我不确定为什么会这样,但是我可以使用以下方法使其工作:

在写代表整数值的字节数组的代码中,我不使用WritableUtils.toByteArray()而不是Text.set(Integer.toString(intVal)).getBytes()

换句话说,我将整数转换为其String表示形式,并使用Text可写对象来获取字节数组,就好像它是字符串一样。

然后,在我的Hive DDL中,我可以将该列称为int并正确解释它。

我不确定最初是什么原因引起的,可能是WritableUtils中的错误,与压缩整数字节数组不兼容,还是对这部分内容的理解有误。无论如何,上述解决方案都能成功满足任务的需求。

关于hadoop - RCFile-发出GZip压缩的int列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18705296/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com