A = load 'a.txt' as (id, a1);
B = load 'b.txt as (id, b1);
C = join A by id, B by id;
D = foreach C generate id,a1,b1;
dump D;
4行目で失敗します:Invalid field projection. Projected field [id] does not exist in schema
A.idに変更しようとしましたが、最後の行が失敗しました:ERROR 0: Scalar has more than one row in the output.
あなたが探しているのは "Disambiguate Operator" です。必要なのはA::id
ではなくA.id
です。
A.id
は、「relation/bagA
があり、id
という列があるそのスキーマ」
A::id
は、「A
からのrecordがあり、id
という列がある」と言います。
だから、あなたはそうするでしょう:
A = load 'a.txt' as (id, a1);
B = load 'b.txt as (id, b1);
C = join A by id, B by id;
D = foreach C generate A::id,a1,b1;
dump D;
汚い選択肢:
私が怠惰で、次々に複数の結合を開始すると、曖昧さの解消が非常に奇妙になります。一意の識別子を使用してください。
A = load 'a.txt' as (ida, a1);
B = load 'b.txt as (idb, b1);
C = join A by ida, B by idb;
D = foreach C generate ida,a1,b1;
dump D;
@nweiler:関係Aの最初と最後のフィールドがわかっている場合は、次のように記述できます。
D = FOREACH C GENERATE A::FirstCol..A:LastCol ;
これにより、FirstColとLastColの間のすべての列が表示されます。