让我们做一个简单的Demo来理解这个问题。
说存储在 HDFS 中“/tmp/a.txt”文件夹中的文件“a.txt”
A = LOAD '/tmp/a.txt' using PigStorage(',') AS (name:chararray,term:chararray,gpa:float);
转储 A;
(约翰,佛罗里达州,3.9)
(约翰,佛罗里达州,3.7)
(约翰,sp,4.0)
(约翰,sm,3.8)
(玛丽,佛罗里达州,3.8)
(玛丽,佛罗里达州,3.9)
(玛丽,sp,4.0)
(玛丽,sm,4.0)
现在让我们根据一些参数(例如名称和术语)按此别名“A”进行分组
B = GROUP A BY(姓名、术语);
转储 B;
((John,fl),{(John,fl,3.7),(John,fl,3.9)})
((John,sm),{(John,sm,3.8)})
((John,sp),{(John,sp,4.0)})
((Mary,fl),{(Mary,fl,3.9),(Mary,fl,3.8)})
((Mary,sm),{(Mary,sm,4.0)})
((Mary,sp),{(Mary,sp,4.0)})
描述 B;
B: {group: (name: chararray,term: chararray),A: {(name: chararray,term: chararray,gpa: float)}}
现在它已成为您所询问的问题陈述。让我演示一下如何访问组元组的元素或元组的元素或两者兼而有之
C = foreach B 生成 group.name,group.term,A.name,A.term,A.gpa;
转储 C;
(约翰,fl,{(John),(John)},{(fl),(fl)},{(3.7),(3.9)})
(约翰,sm,{(John)},{(sm)},{(3.8)})
(约翰,sp,{(John)},{(sp)},{(4.0)})
(Mary,fl,{(Mary),(Mary)},{(fl),(fl)},{(3.9),(3.8)})
(Mary,sm,{(Mary)},{(sm)},{(4.0)})
(Mary,sp,{(Mary)},{(sp)},{(4.0)})
所以我们通过这种方式访问了所有元素。
希望对您有所帮助