0

我有一个 Hadoop SequenceFile,其中键是 IntWritable,值是实现 Writable 的任意 Java 类,并带有一个有趣的 toString() 方法。我很想制作一个两列 Hive 表,其中第一列是作为 int 的键,第二列是作为字符串或 varchar 的值。

我很想以最有品味和最简单的方式做到这一点:我不应该写 200 行代码来说“只需解码然后调用 toString()”。

我目前的解决方案是在将其输入 Hive 之前,做一个额外的 MapReduce 工作,以将其放入我想要的格式,但我发现这很令人反感,原因很明显。

谢谢!

4

2 回答 2

0

您可以直接从 Hive 读取序列文件。对于您的情况,您需要实施org.apache.hadoop.hive.serde2.Deserializer

在反序列化器中,您可以调用该toString方法。不应超过 30 行代码。

于 2014-04-20T21:18:28.357 回答
0

以下示例使用 ThriftDeserializer 类作为表的 SerDe。您可以创建自己的 SerDe(实现 Hive 的序列化器/反序列化器接口)并在创建表时提供​​。

CREATE EXTERNAL TABLE IF NOT EXISTS test
    ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.thrift.ThriftDeserializer'
    with serdeproperties("serialization.format"="org.apache.thrift.protocol.TCompactProtocol",
    "serialization.class"="some.package.ClassName")
    STORED AS SEQUENCEFILE
于 2014-04-21T08:23:16.227 回答