带Java类的Hive SequenceFile;只是传递给toString()

时间:2014-04-20 18:53:34

标签: java hadoop hive sequencefile

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

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

我目前的解决方案只是做一个额外的MapReduce工作,在把它输入Hive之前把它放在我想要的格式中,但我发现这是冒犯性的,原因很明显。

谢谢!

2 个答案:

答案 0 :(得分:0)

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

在解串器中,您可以调用toString方法。不应超过30行代码。

答案 1 :(得分:0)

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

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