将矩阵数据模型转换为Mahout建议的文件数据模型

时间:2016-11-02 15:11:24

标签: hadoop hive apache-pig mahout mahout-recommender

我有一个userID,itemID评级矩阵形式的数据集,我试图将其转换为{userID,itemID,rating}形式,以便与Mahout基于项目的推荐器一起使用,如下所述:{{3 }}。

换句话说,我想转换这样的东西:

    1   2   3
1   1.0 2.0 3.0
2   4.0 5.0 6.0
3   7.0 8.0 9.0

这样的事情:

1,1,1.0
1,2,2.0
1,3,3.0
2,1,4.0
2,2,5.0
2,3,6.0
3,1,7.0
3,2,8.0
3,3,9.0

有没有办法使用Apache Hadoop工具(Pig,Hive等)实现这一目标?

1 个答案:

答案 0 :(得分:0)

您可以使用explode(在配置单元中):

如果您的输入表如下所示:

userID item1 item2 item3
----------------------
1      1.0   2.0   3.0
2      4.0   5.0   6.0
3      7.0   8.0   9.0

然后您的查询可以是:

SELECT userID, split(item_val,'_')[0] as item, split(item_val,'_')[1] as val     
from ( SELECT userID, 
        array(concat_ws('_','item1',item1),
        concat_ws('_','item2',item2),
        concat_ws('_','item3',item3))  as arr from in_table) a
LATERAL VIEW explode(arr) exp as item_val;

说明:内部查询生成此输出:

userID                 arr
-----------------------------------------
1      (item1_1.0   item2_2.0   item3_3.0)
2      (item1_4.0   item2_5.0   item3_6.0)
3      (item1_7.0   item2_8.0   item3_9.0)

然后在爆炸之后,每一行都有userID,itemID和value - 只需要分割itemID和值。

此外,如果表格的itemID定义为double,则需要CAST(item2 as string)才能将其发送到concat_ws