猪:没有嵌套重命名的加入

时间:2015-05-19 22:59:05

标签: mapreduce apache-pig

我有两个数据集

 A(af1, af2, af3)
 B(bf1, bf2, bf3)

当我加入他们的猪时

 C = Join A by af1, B by bf1

随后存储为JSON(删除连接谓词列后)

 store C into 'output.son' using JsonStorage();

我将JSON架构视为

 {"A::af1":val, "A::af2":val, ...., "B::bf2":val, ...}

有没有办法可以剥离不必要的东西(因为我已经处理了歧义),这种嵌套式命名是由连接产生的?

提前致谢

1 个答案:

答案 0 :(得分:0)

我们必须迭代关系/别名C并生成必需的字段,然后存储新的别名,假设新的别名为D.

 D = FOREACH C GENERATE A::af1  AS af1, A::af2 AS af2, A::af3 AS af3, B::bf2 AS bf2, B::bf3 AS bf3;

STORE D INTO 'output.son' USING JsonStorage();

更新:

如果别名A中有100个唯一字段名称,同样在B中,则在加入后我们可以使用..运算符并选择所需的列。我们甚至可以使用位置表示法访问所需的字段($ 0 .. $ 99,$ 101 .. $ 200)

  C = JOIN A BY af1, B BY bf1;

  D = FOREACH C GENERATE af1..af100,bf2..bf100;
  STORE D INTO 'output.son' USING JsonStorage();