2017-02-12 1 views
9

フィールドをキーとして使用する可変キーのマップの値を取得する方法はありますか? 例:私の会社のデータは、異なるロケールごとに異なるだろうとキーなどのロケールを使用して、マップの値を取得することです私は基本的にしたい、この豚の地図から可変キーの値を取得する方法は?

{"en_US", (["en_US" : "English Name"], ["fr_FR" : "French Name"])} 

などのロケールと名前のフィールドがあります。

company_data = load '/data' using PigStorage(); 

final_company_data = FOREACH company_data GENERATE 
              value.locale as locale 
              value.name#locale; 

次のように私は、マップから値を取得するにはvalue.name# 'en_US'が必要であることを理解しています。ロケールを使用して適切な値に置き換える方法はありますか?

Output : final_company_data = {"en_US", "English Name"} 

答えて

5

あなたが豚でそれをすることはできません。キーは静的な値でなければなりません。キーセットのサイズは、あなたがこのような何かを試すことができます(ただし、これは、入力の手間を含んで)あまり大きくない場合

final_company_data = FOREACH company_data GENERATE 
             value.locale as locale 
             value.name#'en_US'; 

en = FILTER company_data BY value.locale == 'en_US'; 
final_company_data_en = FOREACH company_data GENERATE 
             value.locale as locale 
             value.name#'en_US'; 
fr = FILTER company_data BY value.locale == 'fr_FR'; 
final_company_data_en = FOREACH company_data GENERATE 
             value.locale as locale 
             value.name#'fr_FR'; 

、すべてのためにこれを行うので、この例動作するはずですキーを押してから、すべてのサブセットを結合します。このソリューションは貧弱で醜いですが、機能します。

+0

この例をありがとうございます。 – TommyT

+0

これがあなたの問題を解決すればあなたはアップホートまたは答えを受け入れることができます: – bartektartanus

+0

それは..私は誰かが何か良いcozを持っているかどうかを見て待っています。 – TommyT

関連する問題