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