関数を使用してリレーションの列を更新したいと考えています。更新されたデータで新しい列を追加し、古い列を削除する方法を見つけましたが、新しい列には保持したいフィールド名が含まれていません。
たとえば、次のように言い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 番目のフィールドの名前を保持するにはどうすればよいですか?y
x
また、これの古いバージョンを除いて、データセット内のすべての列を保持する簡単な方法はありますか? (つまり、1 つのフィールドを無視するスター式またはプロジェクト範囲式)。
または、これを行うための完全に良い方法はありますか?