Pok*_*com 5 apache-pig hadoop-streaming
我想知道是否可以在Apache Pig中一次转动一个表.
输入:
Id Column1 Column2 Column3
1 Row11 Row12 Row13
2 Row21 Row22 Row23
Run Code Online (Sandbox Code Playgroud)
输出:
Id Name Value
1 Column1 Row11
1 Column2 Row12
1 Column3 Row13
2 Column1 Row21
2 Column2 Row22
2 Column3 Row23
Run Code Online (Sandbox Code Playgroud)
真实数据有几十列.
我可以在一次传递中使用awk然后使用Hadoop Streaming运行它.但我的大部分代码都是Apache Pig,所以我想知道是否有可能在Pig中有效地完成它.
您可以通过两种方式完成此操作:1.编写一个返回一包元组的UDF.它将是最灵活的解决方案,但需要Java代码; 2.写一个像这样严格的脚本:
inpt = load '/pig_fun/input/pivot.txt' as (Id, Column1, Column2, Column3);
bagged = foreach inpt generate Id, TOBAG(TOTUPLE('Column1', Column1), TOTUPLE('Column2', Column2), TOTUPLE('Column3', Column3)) as toPivot;
pivoted_1 = foreach bagged generate Id, FLATTEN(toPivot) as t_value;
pivoted = foreach pivoted_1 generate Id, FLATTEN(t_value);
dump pivoted;
Run Code Online (Sandbox Code Playgroud)
运行此脚本让我得到以下结果:
(1,Column1,11)
(1,Column2,12)
(1,Column3,13)
(2,Column1,21)
(2,Column2,22)
(2,Column3,23)
(3,Column1,31)
(3,Column2,32)
(3,Column3,33)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4816 次 |
| 最近记录: |