【问题标题】:how to convert from group into set in apache pig如何从组转换为 apache pig 中的集合
【发布时间】:2013-11-15 10:00:15
【问题描述】:

我正在使用 Apache Pig 和 Mahout。现在我正在研究 apache mahout 的频繁模式增长。我有以下格式的数据

    user items
    1     i1
    1     i2
    1     i3
    2     i2
    2     i5
    2     i6
    3     i1
    3     i4

--加载数据

data = LOAD '$input' AS (user,item);

然后我按用户对数据进行分组

grpdata = GROUP data BY user;

我明白了

1 {(1,i1),(1,i2),(1,i3)}
2 {(2,i2),(2,i5),(2,i6)}
3 {(3,i1),(3,i4)}

这是我的问题,如何将分组后创建的包更改为以下格式

1 i1,i2,i3
2 i2,i5,i6
3 i1,i4

【问题讨论】:

    标签: hadoop apache-pig mahout bag


    【解决方案1】:

    你可以通过bag projection只获取你感兴趣的字段:

    proj = FOREACH grpdata GENERATE group, data.item;
    

    这会给你

    1 {(i1),(i2),(i3)}
    2 {(i2),(i5),(i6)}
    3 {(i1),(i4)}
    

    不幸的是,没有内置功能可以调整包被序列化为字符串的方式。您将需要编写一个 UDF 来为您完成该工作。

    【讨论】:

    • 谢谢。这对我帮助很大。
    【解决方案2】:

    为了获得:

    (i1,i2,i3)
    (i2,i5,i6)
    (i1,i4)
    

    你可以这样做:

    res = foreach grpdata generate FLATTEN(BagToTuple($1.item));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-19
      • 2013-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多