hive sequencefile和java类;只需传递到tostring()

zlhcx6iw  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(337)

我得到了一个hadoop sequencefile,其中键是intwritable,值是实现可写的任意java类,并使用了一个有趣的tostring()方法。我想创建一个两列的配置单元表,其中第一列是int形式的键,第二列是string或varchar形式的值。
我想用最有品味和最简单的方式来做这件事:我不需要写200行代码来说“只要解码这个,然后调用tostring()”。
我目前的解决方案只是做一个额外的mapreduce工作,在将它输入到hive之前将它以我想要的格式放置,但是我发现这是出于明显的原因。
谢谢!

yb3bgrhw

yb3bgrhw1#

下面的示例使用thriftdeserializer类作为表的serde。您可以创建自己的serde(实现配置单元的序列化器/反序列化器接口),并在创建表时提供该接口。

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
raogr8fs

raogr8fs2#

您可以直接从配置单元读取序列文件。对于您的情况,您需要实施 org.apache.hadoop.hive.serde2.Deserializer 在反序列化程序中,可以调用 toString 方法。不应超过30行代码。

相关问题