Gewusst wie: Python-UDF-Wörterbuch-Rückkehrschema in PIG

8

Wie lautet das Ausgabeschema zum Zurückgeben eines Wörterbuchs aus Python-UDF bei Verwendung von Apache PIG.

Ich habe ein Wörterbuch mit Wörterbüchern, etwa so:

%Vor%

und mein Ausgabeschema sieht wie

aus %Vor%

** eckige Klammern, weil wir in Pig [] für die Map verwenden, in die dieses Dictionary konvertiert wird.

    
user1620334 12.11.2012, 19:55
quelle

1 Antwort

3

Wenn Sie die Standard-jython-UDFs und keine andere Distribution wie streaming_python verwenden, die durch Mörteldaten bereitgestellt wird, müssen Sie nur Folgendes tun:

%Vor%

Die Schlüssel entsprechen denen, die Sie in Python festgelegt haben. Wenn Sie in Ihrem Diktat noch weitere Wörterbücher haben, sollten Sie sich keine Gedanken darüber machen. Schwein wird es verstehen und die folgende Syntax verwenden:

%Vor%

Es gibt einen großen Nachteil, wenn dict von einer jython-UDF zurück an pig übergeben wird. Sie können nur einen Datentyp für alle Werte im dict setzen, dh, wenn Sie keinen Datentyp setzen, verwendet pig Bytearray als der Datentyp und dies könnte ein Problem bei der Arbeit mit Daten oder komplexen Strukturen sein. Zum Beispiel:

%Vor%

Tupel und Taschen:

Wenn Sie ein Tupel oder einen Beutel von einem jython-UDFs zurück an pig schicken möchten, ist es nützlich, daran zu denken, dass Pythons Listen in Taschen und Tupel zu Tupeln konvertiert werden. Zum Beispiel:

Listen:

%Vor%

Denken Sie daran, dass Schweinebeutel mit Tupeln gefüllt sind. Wenn Sie also eine schöne Struktur für Ihre Tasche festlegen möchten, können Sie ein Tupel in der Tasche deklarieren, und dort können Sie alle Datentypen festlegen, die Sie passieren. Beispiel:

%Vor%

Schließlich sollten Tupel irgendwie intuitiv sein, sie sind die einfachste zu verwendende Struktur, wenn man jython benutzt. Innerhalb eines Tupels können Sie beliebig viele Felder und beliebig viele Ebenen festlegen, solange Sie den obigen Beispielen folgen. Sie könnten ein Tupel innerhalb eines Tupels deklarieren, ein Tupel, das einen Beutel und andere Werte hat, usw.

Ich empfehle dringend, Java-UDFs zu verwenden, wenn Sie versuchen, komplexe Operationen auszuführen oder mit komplexen Datentypen wie JSON-Strukturen, Arrays und Listen zu arbeiten. Die Lernkurve kann ein wenig steiler sein, aber sobald Sie das geschafft haben, wird Ihre Entwicklung viel schneller und auch der Durchsatz Ihres Programms.

    
Sabaspro 03.12.2014 14:45
quelle