0

関数を使用してリレーションの列を更新したいと考えています。更新されたデータで新しい列を追加し、古い列を削除する方法を見つけましたが、新しい列には保持したいフィールド名が含まれていません。

たとえば、次のように言い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を持つように、2 番目のフィールドの名前を保持するにはどうすればよいですか?yx

また、これの古いバージョンを除いて、データセット内のすべての列を保持する簡単な方法はありますか? (つまり、1 つのフィールドを無視するスター式またはプロジェクト範囲式)。

または、これを行うための完全に良い方法はありますか?

4

1 に答える 1

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}
于 2013-11-08T02:56:40.337 に答える