我的mapreduce使用AvroKeyValueOutputFormat写了一个avro文件,但是我将这个文件导入hive时遇到了一些麻烦。
我如何在hive中定义我的架构以使其正常工作?
答案 0 :(得分:1)
您必须使用
中描述的AvroSerDe或者您必须将输出转换为您在定义的配置单元表中使用的RowFormat(再次使用另一个mapreduce作业)
此致
马丁
答案 1 :(得分:0)
AvroSerDe的格式可能有点棘手。只要你知道Avro架构虽然它往往会产生奇迹。希望这个例子有所帮助。
CREATE EXTERNAL TABLE HIVEDATA
ROW FORMAT
SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
WITH SERDEPROPERTIES ('avro.schema.literal'='
{
"namespace": "originalname",
"name": "feature_value",
"type": "record",
"fields": [
{"name": "acct_id", "type": "long"},
{"name": "feature_name", "type": ["null","string"], "default": null},
{"name": "namespace", "type": ["null","string"], "default": null},
{"name": "feature_value", "type": ["null","double"], "default": null}
]
}
')
STORED AS
INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
LOCATION '/hdfs/location'
;