Pig中数据({(b,c),(d,e)})的正确Schema应该如何定义?
正确的Pig Schema定义方案
首先看你提供的数据({(b,c),(d,e)}),这是一个包(Bag),里面包含两个元组(Tuple),每个元组有两个字符串类型的元素。你之前的尝试出错是因为语法错误(b:a:chararray是无效写法),还有结构匹配的问题,下面分两种常见场景给你正确的Schema:
场景1:数据作为关系的顶层结构
如果这个包是你加载的整个数据内容,Schema可以这样定义:
my_data = LOAD 'your_data_path' AS (my_bag: bag {t: tuple(first: chararray, second: chararray)});
这里的t是元组的别名(可以自定义),first和second是元组内两个字段的名称(你也可以换成b/c或者d/e,但字段名要统一,因为包内所有元组结构要一致)。
场景2:数据嵌套在元组内部
如果你需要把这个包放在一个元组字段里(就像你之前尝试的结构),正确的Schema应该是:
my_data = LOAD 'your_data_path' AS (t1: tuple(B1: bag {t: tuple(a: chararray, b: chararray)}));
你之前的错误是写成了b:a:chararray,这是语法错误,字段类型应该直接跟在字段名后面,比如b:chararray。
验证小技巧
你可以用DESCRIBE命令查看加载后的关系结构,确认是否符合预期:
DESCRIBE my_data;
如果结构正确,输出会显示包和元组的层级关系,以及每个字段的类型。
内容的提问来源于stack exchange,提问作者user5282677
相关产品推荐
相关产品推荐

