Pig - 更新列时保留模式

时间:2013-11-07 22:28:09

标签: apache-pig

我想使用函数来更新关系中的列。我已经想出如何使用我更新的数据添加新列并删除旧列,但新列不包含我想保留的字段名。

例如,假设students.txt是:

John    18      4.0
Mary    19      3.8
Bill    20      3.9
Joe     18      3.8

猪:

x = load 'students.txt' as (name:chararray, age:int, gpa:float);

dump x
(John,18,4.0)
(Mary,19,3.8)
(Bill,20,3.9)
(Joe,18,3.8)

describe x
x: {name: chararray,age: int,gpa: float}


y = foreach x generate name, (age==18?999:age), gpa;

dump y;
(John,999,4.0)
(Mary,19,3.8)
(Bill,20,3.9)
(Joe,999,3.8)

describe y;
y: {name: chararray,int,gpa: float}

如何为第二个字段保留名称age,以便y具有与x相同的架构?

此外,是否有一种简单的方法可以保留数据集中的每一列,除了旧版本的这一列? (即忽略一个字段的星形表达式或项目范围表达式。)

或者有更好的方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我找到了一个快速的方法。关键是在函数之后使用as [field name]

y = foreach x generate name, (age==18?999:age) as age, gpa;

dump y
(John,999,4.0)
(Mary,19,3.8)
(Bill,20,3.9)
(Joe,999,3.8)

describe y
y: {name: chararray,age: int,gpa: float}