我有一个Hadoop SequenceFile,其中键是IntWritable,值是一些实现Writable的任意Java类,并带有一个有趣的toString()方法。我想做一个两列Hive表,其中第一列是作为int的键,第二列是作为字符串或varchar的值。
我希望以最有品味和最简单的方式做到这一点:我不应该写200行代码来说“只需解码它然后调用toString()”。
我目前的解决方案只是做一个额外的MapReduce工作,在把它输入Hive之前把它放在我想要的格式中,但我发现这是冒犯性的,原因很明显。
谢谢!
答案 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