2016-04-01 15 views
0

ハイブUDFでグローバル変数を使用する方法があれば教えてください。ハイブUDFグローバル変数

私は以下の問題の解決策を見つけようとしています。 below.Iファイルの3種類の

  1. 4列のファイルを持っているよう シナリオであろう(カラム名を想定でき、B、C、及びDである)
  2. は2列(B、持つファイルD)
  3. 2列(B、C)

Iは、標準的なフォーマットにすべての3つのファイルを変換する(ファイル1つの形式のファイル - 4列の出力)。 標準形式に変換するには、ファイルの最初の行にあるヘッダーレコードを参照する必要があります。だから私の入力ファイルが256MBで、複数のマッパーが呼び出されるなら、各マッパーがグローバル変数(ヘッダ情報)を参照できるような方法がありますか?
私のHive UDFを呼び出すすべてのマッパーに共通の変数を持たせる方法はありますか?

注:UDFは、完全な行を読み取り、それを次のテーブルのHDFSの場所に書き込むことで、1つの列テーブルで実行されます。

答えて

0

はい、これを行う方法があり、私はそれを自分でやっています。

最良の方法は、のファイルを読み込んでmap-reduceジョブを開始し、使用するマッパーとリデューサーの設定値を設定することです。あなたはこのバックを読み出すことができますマッパーのinitializeメソッドに続いて

// assume c = Configuration() 

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

したがって、たとえば、あなたはあなたの主な方法であなたの仕事を起動する前に、この(擬似スカラ座)のような何かをしたいです:

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

ハイブUDFでは、UDFで提供されているフックを使用して同様のことを行うことができます –