2013-07-16 12 views
14

Eigentlich schreibe ich PIG Script und möchte einige Sätze von Anweisungen ausführen, wenn eine der Bedingungen erfüllt ist.Gibt es einen Conditional IF-ähnlichen Operator in Apache PIG?

Ich habe eine Variable gesetzt und auf einen Wert dieser Variablen überprüft. Angenommen

if flag==0 then 
    A = LOAD 'file' using PigStorage() as (f1:int, ....); 
    B = ...; 
    C = ....; 
else 
    again some Pig Latin statements 

Kann ich dies in PIG-Skript tun? Wenn ja, wie kann ich das tun?

Danke.

+0

Ich stieß auf bedingten Operator in Pig Latin wie (a == b? C1: c2) ;. Aber wie kann ich eine Menge von Pig Statements dazwischen einfügen? –

+0

Bhavesh, Sie müssen einen Wrapper dafür schreiben Die empfohlene Ansatz für das Schreiben von Programmen, die bedingte Logik oder Schleife Konstrukte haben, ist Pig in einer anderen Sprache wie Python, JavaScript oder Java einbetten und den Kontrollfluss von dort verwalten. – Nag

Antwort

4

Sie können einen Python-Wrapper für Ihr Pig-Skript erstellen. Siehe Embedded Pig in der Dokumentation.

3

Pig ist Datenflusssprache nicht Kontrollfluss. Nur Konstrukt, das sich nähert, ist PIG split, aber es ist sehr begrenzt.

Sie können oozie und sein decision Konstrukt mit zwei Schweine-Skripten verwenden.

22

Ja, Pig bietet eine if-then-else-Konstruktion, , aber es wird nicht in der Art verwendet, wie Sie fragen.

Schweine if-then-else is an arithmetic operator mit der Stenographie aufgerufen „Zustand true_value: false_value“ als Teil eines Ausdrucks, wie:

X = FOREACH A GENERATE f2, (f2==1?1:COUNT(B)); 

Sie müssen bereits die Tabelle A geladen, dies zu tun . Um den Kontrollfluss um ganze Pig-Anweisungen auszuführen, benötigen Sie etwas wie oozie, wie von Fakrudeen vorgeschlagen.

+0

Dies funktioniert für Bedingungen, die auf den Daten basieren, die verarbeitet werden, aber nicht auf Bedingungen/Flags, die auf externen Parametern basieren. –

1

erstellen UDF (zum Beispiel in Java) und bettet dann die in Ihrem PIG Skript. Sie müssen die JAR-Datei, die Sie nach dem Schreiben der UDF generieren, registrieren.

// (so etwas wie dieses), sagen Sie Ihren Java UDF class ist UDFCondition & die erzeugte jar Datei ist PigUDFCondition.jar, dann in Ihrem PIG Code

Register PigUDFCondition.jar

X = foreach A generate UDFCondition(..flag...) 
0

Ab Version 0.12 ist eine CASE-Anweisung verfügbar.

+0

Und wie würde das helfen? Könnten Sie Ihre Antwort um ein Beispiel erweitern? – dakab

Verwandte Themen