2016-04-01 23 views
0

Hive UDF'de global bir değişkene sahip olmanın bir yolu var mı?Hive UDF Global değişkeni

Aşağıdaki sorunun çözümünü bulmaya çalışıyorum. below.I

    4 sütun ile bir dosya (sütun isimleri, A, B, C ve D varsayalım)
  1. dosya

    için üç tip olarak Senaryo olacaktır
  2. 2 sütun (B olan bir dosya D)
  3. 2 sütun (B, C)

Ben standart biçime her üç dosyalarını dönüştürür (dosya 1 biçiminde olan bir dosya - 4 sütunlu bir çıkış). Standart formata dönüştürmek için dosyanın ilk satırında bulunan başlık kaydına başvurmalıyım. Yani giriş dosyamda 256MB ve birden fazla eşleştirici çalıştırılırsa, her bir eşleştirmenin bir genel değişkene (Başlık bilgisi) başvurabilmesi için herhangi bir yol var.
Kısacası, tüm eşleştiriciler için Hive UDF'imi çağırmak için ortak bir değişkene sahip olmanın bir yolu var mı?

Not: UDF, tüm satırı okuyarak ve ardından bir sonraki tablo HDFS konumuna yazarak tek bir sütun tablosu üzerinde çalışacaktır.

cevap

0

Evet, bunu yapmanın bir yolu var ve bunu kendim yaptım.

iyi yolu dosyayı okuyarak harita azaltmak işe başlamak ÖNCE bilgi bulmaktır, o zaman Mappers ve İndirgenler kullanmak için bir yapılandırma değer ayarlayabilirsiniz. bunu geri dışarı okuyabilir senin haritacıları initialize yönteminde Sonra

// assume c = Configuration() 

val headerInformationJson = getHeaderInformation(filePath1) 
c.set("headerInfo", headerInformationJson) 

:

Yani, örneğin size ana yönteminde işinizi başlatmadan önce bu (sözde scala) gibi bir şey yapardım:

val conf = context.getConfiguration() 
val headerInfo = conf.get("headerInfo"); 
+0

Hive UDF için benzer bir şey yapmak için UDF tarafından sağlanan kancaları kullanabilirsiniz. –