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.