8

Qual è lo schema di output per restituire un dizionario da UDF Python durante l'utilizzo di Apache PIG.Procedura: Restituire lo schema del dizionario UDF Python in PIG

Ho un dizionario di dizionari, qualcosa di simile:

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

e il mio schema di output assomiglia

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

** parentesi quadre perché in Pig usiamo [] per mappa che questo dizionario è convertito a.

risposta

3

Se si utilizzano le UDF Jython standard e non qualsiasi altra distribuzione come la streaming_python fornito dai dati di mortaio, tutto quello che dovete fare è:

@outputSchema('m:map[]') 

Le chiavi saranno gli stessi che avete impostato in python. Se si dispone di un altro dizionari all'interno del vostro __dict__ non si deve preoccupare, maiale lo capirà e utilizzare la seguente sintassi:

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

C'è un grosso svantaggio circa passando dict indietro al maiale da un UDF Jython, sei solo in grado di impostare un tipo di dati per tutti i valori nel dict, il che significa che se non si imposta alcun tipo di dati pig userà bytearray come tipo di dati e questo potrebbe essere un problema quando si lavora con date o strutture complesse. Per esempio:

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

tuple e Borse:

Quando si desidera restituire una tupla o un sacchetto di nuovo al maiale da un UDF Jython è utile ricordare le liste che di pitone convertire in borse e tuple di tuple . Per esempio:

Liste:

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

Ricordate che i sacchetti di maiale sono pieni di tuple, quindi se si desidera impostare una bella struttura per la borsa, si potrebbe dichiarare una tupla all'interno della borsa, e non ci si sarà in grado di impostare tutti i tipi di dati che passerai. Esempio:

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

Infine, tuple devono essere in qualche modo intuitivo, sono la struttura più semplice da usare quando si utilizza jython. All'interno di una tupla puoi impostare quanti campi vuoi e quanti livelli vuoi finché segui gli esempi sopra. Si potrebbe dichiarare una tupla all'interno di una tupla, una tupla che ha una borsa e altri valori, ecc.

Si consiglia vivamente di utilizzare UDF Java quando si tenta di eseguire operazioni complesse o di lavorare con tipi di dati complessi come strutture JSON, matrici e elenchi. La curva di apprendimento può essere un po 'più ripida, ma una volta che lo hai superato, il tuo sviluppo sarà molto più veloce e anche la velocità del tuo programma.