2017-05-18 5 views
0

私はどうにかして結合後にキーを削除しているようです。豚:参加後にフィールドが存在しない

コンテキスト

目標は、唯一のtable_1は異なる会員IDで構成されてtable_2からすべてのレコードを取得することです。

初心者でも、この目標を達成するためのベストプラクティスの指針と、「投影フィールド」エラーが発生する理由に関するコメントをお待ちしております。

私は

-- assume %default vals set for path_1 and path_2 to data 

-- load the data 

table_1 = LOAD '$path_1' as (day, member_id, country); 
table_2 = LOAD '$path_2' as (day, member_id, country); 

-- get distinct member_id's from table_1 

table_1_ids = DISTINCT(FOREACH table_1 GENERATE member_id as member_id); 

-- get all records from table_2 that only have table_1_ids 

new_table_2 = JOIN table_1_ids BY member_id, table_2 BY member_id; 

エラー

無効なフィールド投影を試みた何。フィールド[member_id]がスキーマに存在しません:table_1_ids :: member_id:bytearray、table_2 :: day:bytearray、table_2 :: member_id:bytearray、table_2 :: country:bytearray。

+0

便利な場合:new_table_2 = table_2 [:Pythonのパンダでは、これはのような単純なものでしょう – Quetzalcoatl

+0

こんにちはQuetzalcoatl、私が気づくのは、豚スクリプトの最後の行でmember_idにする必要があるメンバーIDです - > new_table_2 –

+0

また、このスクリプトで別のやり方を確認してください - > table_1_ids –

答えて

0

コメントのために@piyushと@Nazarに感謝します。所望の結果は私にある取得する 一つの方法)を一意に参加するためにキーにラベルを付けると、ii)明確な声明を分離:

table_1 = LOAD '$path_1' as (day, member_id_1, country); 
table_2 = LOAD '$path_2' as (day, member_id_2, country); 
all_table_1_ids = FOREACH table_1 GENERATE member_id_1 as member_id_1; 
distinct_table_1_ids = DISTINCT all_table_1_ids; 
new_table_2 = JOIN distinct_table_1_ids BY member_id_1, table_2 BY member_id_2; 
0

まず最初にあなたは参加後にスクリプトを提供していませんでしたが、あなたはgenerateステートメントをいくつか持っていると思います。結合後、すべての列の名前が<alias_name>::<field_name>に変更されます。両方のエイリアスに同じ名前のフィールド(member_id)があるので、参加後、単純名で参照することはできません。あなたはそれのフルネームtable_1_ids::member_idまたはtable_2::member_idを使用しなければなりません(それらは同じ値を持っていますが、結合結果ではまだ2つの異なるフィールドです)。お役に立てれば。

+0

ありがとうございます。この場合、::構文も役立ちます。 – Quetzalcoatl

関連する問題