旋转猪

问题描述 投票:3回答:2

这与Pivot table with Apache Pig中的问题有关。我输入数据为

Id    Name     Value 
1     Column1  Row11 
1     Column2  Row12 
1     Column3  Row13 
2     Column1  Row21 
2     Column2  Row22 
2     Column3  Row23 

并希望转动并获得输出

Id    Column1 Column2 Column3 
1      Row11    Row12   Row13 
2      Row21    Row22   Row23 

请告诉我如何在猪中做到这一点。

pivot apache-pig
2个回答
2
投票

在没有UDF的情况下执行此操作的最简单方法是对Id进行分组,然后对每个列名称的嵌套foreach选择行进行分组,然后将它们连接到generate中。见脚本:

inpt = load '~/rows_to_cols.txt' as (Id : chararray, Name : chararray, Value: chararray);
grp = group inpt by Id;
maps = foreach grp {
    col1 = filter inpt by Name == 'Column1';
    col2 = filter inpt by Name == 'Column2';
    col3 = filter inpt by Name == 'Column3';
    generate flatten(group) as Id, flatten(col1.Value) as Column1, flatten(col2.Value)  as Column2, flatten(col3.Value)  as Column3;
};

输出:

(1,Row11,Row12,Row13)
(2,Row21,Row22,Row23)

另一个选择是编写一个UDF,它将一个包{name,value}转换为map [],而不是使用列名作为键来使用get值(例如,vals#'Column1')。


0
投票

不确定猪,但在火花中,你可以用一行命令来做到这一点

df.groupBy("Id").pivot("Name").agg(first("Value"))
© www.soinside.com 2019 - 2024. All rights reserved.