【发布时间】:2015-10-31 11:51:50
【问题描述】:
我想在 Hive 中查询来自 Mahout 推荐器的制表符分隔输出。建议如下所示:
54508 [19:4.9,22:3.5]
54584 [17:5.2]
54648 [13:6.1,3:5.9]
54692 [17:8.1]
55424 [1:3.8]
55448 [16:2.7,3:1.2]
55452 [17:6.8]
57084 [42:6.8,3:5.4]
57212 [17:3.5]
有两列:第一列包含用户 ID,第二列包含推荐产品列表及其预期评分。
我创建了一个 Hive 表:
CREATE TABLE `recommendations_raw`(
user int,
recommendations string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
'/etl/recommender/output';
而且我能够在 Hive 查询中将数据转换为长表格形式:
select
user,
product,
rating
from recommendations_raw
lateral view explode(str_to_map(substr(recommendations, 2, length(recommendations) - 2), ",", ":")) product_rating as product, rating
user product rating
54508 19 4.9
54508 22 3.5
54584 17 5.2
[etc...]
但是,我宁愿在 create table 语句中创建映射,而不是在查询中使用 str_to_map,因为当它实际上是 map 时,使用 string 数据类型创建表似乎是错误的。
这可能/实用吗?如果有,怎么做?
【问题讨论】: