2017-02-12 55 views
9

Anahtar olarak alanı kullanarak değişken anahtarlar için bir haritanın değerini elde etmenin bir yolu var mı? Ör: Benim şirket verileri, farklı yerel için farklı olacaktır olarak anahtar olarak yerel kullanılarak haritanın değerini elde etmektir Ne esasen istiyorum buBir domuz haritasından bir değişken anahtar için değer nasıl alınır?

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

gibi yerel ve ad alanlarını vardır.

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

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

şu bana biz value.name # 'en_US' ihtiyaç haritadan bir değeri almak için anlamak bir hata coz verir. Yerel değeri kullanabilmemizin bir yolu var mı?

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

cevap

5

Hatırladığım kadarıyla bunu Pig'da yapamazsınız. Anahtar, statik değer olmalıdır. Anahtar ayarı boyutu böyle bir şey deneyebilirsiniz çok büyük değilse

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

(ama bu yazarak bir çok içerir): Yani mesela bu çalışması gerekir

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'; 

ve her için bunu anahtarı ve daha sonra tüm alt kümelerin birliğini yapın. Bu çözüm zayıf ve çirkin ama işe yarıyor.

+0

Bu örnek için teşekkürler. – TommyT

+0

Eğer bu sorunu çözdüyseniz, cevap yazabilir veya cevabı kabul edebilirsiniz :) – bartektartanus

+0

Yapıyor .. Sadece birisinin daha iyi bir şey olup olmadığını görmek için bekliyorum Herhangi bir alternatifi de düşünemiyorum. – TommyT