2012-11-12 20 views
8

Apache PIG kullanırken Python UDF'den bir sözlük döndüren çıktı şeması nedir.Nasıl Yapılır: Python UDF sözlük dönüş şeması PIG'de

Ben sözlükleri sözlüğü, böyle bir şey var:

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

ve benim çıkış şeması haritaya bunun için [] kullanmak Domuzunda

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

** köşeli parantez çünkü görünüyor sözlük dönüştürülür.

cevap

3

böyle harç verileri tarafından sağlanan streaming_python gibi standart jython UDF'leri ve başka hiçbir dağıtım kullanıyorsanız, yapmanız gereken tek şey:

@outputSchema('m:map[]') 

tuşları ayarladığınız aynı olacak python'da. Eğer dict içinde başka sözlükleri varsa bu konuda endişe etmemesi gerektiğini, domuz anlamak ve aşağıdaki sözdizimini kullanır:

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

büyük bir dezavantaj, bir jython UDF gelen domuz geri dicti geçirilmesi konusunda yok,

vardır Sadece, herhangi bir veri türü domuzunu veri türü olarak kullanamayacak ve tarihler veya karmaşık yapılar ile çalışırken bir sorun yaratabileceksiniz anlamına gelir. Örneğin:

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

Demetler ve Çanta: Eğer o Python listelerinin küpe için çanta ve küpe dönüştürmek hatırlamak yararlı bir jython UDF gelen domuz geri bir demet veya bir çanta dönmek istiyorum

.

Listeler:

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

Domuz çanta küpe ile dolu olduğunu unutmayın, bu yüzden çantanıza için güzel bir yapı ayarlamak isterseniz, size torba içinde bir demet beyan ve orada olabilir Örneğin Geçireceğiniz tüm veri tiplerini ayarlayabilecektir. Örnek:

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

, küpe nasılsa sezgisel olmalı, bunlar Jython kullanırken kullanımı en kolay yapısı vardır. Bir tuple içinde, yukarıdaki örnekleri takip ettiğiniz sürece istediğiniz kadar ve istediğiniz kadar çok alan ayarlayabilirsiniz. Bir tuple, bir çanta ve diğer değerler içeren bir tuple bildirebilirsiniz.

JSON yapıları, diziler ve karmaşık veri türleriyle çalışırken veya karmaşık veri türleriyle çalışırken Java UDF'lerini kullanmanızı şiddetle tavsiye ederim. listeleri. Öğrenme eğrisi biraz daha dik olabilir, ancak bunu bir kez geçtikten sonra, gelişiminiz çok daha hızlı olacak ve ayrıca programınızın çıktısı olacaktır.