Apache pig pig中复杂数据类型的问题

Apache pig pig中复杂数据类型的问题,apache-pig,Apache Pig,我不熟悉pig编程,我在pig中更多地研究简单数据类型,当我尝试研究复杂数据类型时,我没有得到合适的示例,对于复杂数据类型的输入和输出,有谁能解释复杂数据类型,特别是用实时示例详细映射数据类型,提前感谢。Pig有三种复杂类型:映射、元组和包。这些复杂类型可以包含标量类型和其他复杂类型。因此,有可能有一个映射,其中值字段是一个包,它有一个元组,其中一个字段是映射 映射:映射是以键值对表示的数据元素映射的特征。该键应始终为chararray类型,并可用作访问关联值的索引。映射中的所有值不一定都是同一

我不熟悉pig编程,我在pig中更多地研究简单数据类型,当我尝试研究复杂数据类型时,我没有得到合适的示例,对于复杂数据类型的输入和输出,有谁能解释复杂数据类型,特别是用实时示例详细映射数据类型,提前感谢。

Pig有三种复杂类型:映射、元组和包。这些复杂类型可以包含标量类型和其他复杂类型。因此,有可能有一个映射,其中值字段是一个包,它有一个元组,其中一个字段是映射

映射:映射是以键值对表示的数据元素映射的特征。该键应始终为chararray类型,并可用作访问关联值的索引。映射中的所有值不一定都是同一类型的

映射常量由方括号定义,方括号中用“#”分隔键与值,用“,”分隔键与值对

 ['Name'#'John', 'Age'#22]  
上面定义了一个带有两个键值对的map常量。请注意,键始终为chararray类型,而值分别为chararray和int类型

 grunt> data = load 'StudentData';  
 grunt> finaldata = foreach data generate $0;  
 grunt> dump finaldata  
为了将文件中的数据作为地图加载,数据的结构应如下所示:

 [this#1.9, is#2.5]  
 [my#3.3, vocabulary#4.1] 
 grunt> mapdata = load 'MapData' as (a:map[]); 
Sample PigLatin语句将上述数据样本作为映射加载

 grunt> mapdata = load 'MapData' as (a:map[float]);  
 grunt> values = foreach mapdata generate a#'this' as value;  
 grunt> value = FILTER values BY value is not null;  
 grunt> dump value 
上述语句的输出为:

 (1.9)
load语句将构造两个映射,每个映射具有两个键值对。注意,我们在load语句中将值的数据类型指定为“float”。我们可以选择不指定值的类型,如下所示:

 [this#1.9, is#2.5]  
 [my#3.3, vocabulary#4.1] 
 grunt> mapdata = load 'MapData' as (a:map[]); 
在这种情况下,Pig假设值的类型为bytearray,并根据PigLatin语句处理数据的方式执行隐式转换到适当的类型

在第二条语句中,我们试图检索与“this”关联的值。注意语法

a#'this'
返回1.9

元组:元组是Pig数据元素的固定长度、有序集合。元组包含可能属于不同类型的字段。元组类似于Sql中以字段作为列的行

由于元组是有序的,所以可以根据字段在元组中的位置引用字段。元组可以(但不是必需)声明描述每个字段的数据类型并提供字段名称的模式

元组常量使用括号定义元组,用逗号分隔不同的字段

 ('John', 25) 
上面声明了一个tuple常量,其中包含两个数据类型字段,分别为chararray和int

 grunt> data = load 'StudentData';  
 grunt> finaldata = foreach data generate $0;  
 grunt> dump finaldata  
在上面的语句中,数据是一个外部包(下面将解释包),其中包含从StudentData文件加载的元组。注意,我们没有为元组(元组中包含的字段的类型/名称)声明模式。在这种情况下,元组的模式是未知的

但是,我们可以通过位置引用元组中的各个字段($0引用元组中的第一个字段)

在本例中,我们为元组定义了一个模式

:包是元组的无序集合。因为包是无序的,所以我们不能根据其位置引用包中的元组。包也不需要声明模式。对于包,模式描述包中的所有元组

Bag常量是使用大括号构造的,大括号中用逗号分隔Bag中的元组

 {('John', 25), ('Nathan', 30)}  
上面构造了一个包含两个元组的包

更多信息--