2012-11-12 10 views
8

Apache PIGを使用しているときにPython UDFから辞書を返す出力スキーマとは何ですか?方法:PIGのPython UDF辞書返却スキーマ

私は、このような何かの辞書の辞書を持っている:豚に我々は[]マップのどの本を使用しているため**角括弧を

dict = {x:{a:1,b:2,c:3}, y:{d:1,e:3,f:9}} 

を、私の出力スキーマが

@outputSchema("m:map[im:map[X:float,Y:float]]") 

のように見えます辞書はに変換されます。

答えて

3

あなたは、このようなモルタルデータが提供するstreaming_pythonとして標準のJythonのUDFではなく、他のディストリビューションを使用している場合は、すべてを行う必要がある:

@outputSchema('m:map[]') 

キーを使って設定したことと同じになりますPythonで。あなたは辞書内の別の辞書を持っている場合は、あなたがそれを心配べきではない、豚はそれを理解し、次の構文を使用します。

([first#{third=inner_dict},first#outter_dict]) 

をのJython UDFから裏ブタに辞書を渡すことについての一つの大きな欠点がありますが、あなたはありますdictのすべての値に対して1つのデータ型しか設定できません。つまり、データ型を設定しない場合、ブタはデータ型としてbytearrayを使用します。これは、日付または複雑な構造を扱うときに問題になる可能性があります。たとえば、次のように

@outputSchema('m:map[chararray]') 

タプルやバッグ:あなたはPythonのリストはタプルにバッグやタプルに変換覚えておくことは有益であるのJythonのUDFから豚に戻っタプルやバッグを返したい

。たとえば、次のように

リスト:

@outputSchema('m:bag{chararray}') 

豚のバッグは、あなたがそこにタプルで満たされているので、あなたは、あなたのバッグのための素敵な構造を設定したい場合は、あなたが袋の中にタプルを宣言することができ、およびことを忘れないでくださいあなたが渡すすべてのデータ型を設定することができます。例:

@outputSchema('map_reduce:bag{t:(key:chararray,value:int,start_date:datetime,end_date:datetime)}') 

最後に、タプルは何とか直感的である必要があり、彼らはjythonのを使用する際に使用するための最も簡単な構造です。タプル内では、上の例に従う限り、必要なフィールド数を自由に設定できます。あなたはタプルの中にタプル、バッ​​グやその他の値を持つタプルを宣言することができます。

複雑な操作やJSON構造体、配列など複雑なデータ型を扱うときは、Java UDFの使用を強くお勧めします。リスト。学習曲線はもう少し急になる可能性がありますが、一度それを過ぎると、開発ははるかに高速になり、プログラムのスループットも向上します。