2013-07-16 33 views
14

Thực ra tôi đang viết PIG Script và muốn thực thi một số câu lệnh nếu một trong các điều kiện được thỏa mãn.Có bất kỳ toán tử IF có điều kiện nào trong Apache PIG không?

Tôi đã đặt một biến và kiểm tra một số giá trị của biến đó. Giả sử

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

Tôi có thể làm điều này trong PIG Script không? Nếu có, thì làm thế nào tôi có thể làm điều này?

Cảm ơn.

+0

Tôi bắt gặp toán tử có điều kiện trong Pig Latin như (a == b? C1: c2) ;. Nhưng làm thế nào tôi có thể chèn số lượng lớn các báo cáo Pig ở giữa? –

+0

Bhavesh, Bạn cần phải viết một wrapper cho rằng Cách tiếp cận được đề nghị để viết chương trình có logic điều kiện hoặc cấu trúc vòng lặp là nhúng Pig Latin bằng ngôn ngữ khác như Python, JavaScript hoặc Java và quản lý luồng điều khiển từ đó. – Nag

Trả lời

4

Bạn có thể tạo một trình bao bọc Python xung quanh tập lệnh Pig của bạn. Xem Embedded Pig trong tài liệu.

3

Pig là ngôn ngữ luồng dữ liệu không kiểm soát luồng. Chỉ có cấu trúc gần nhất là PIG split, nhưng nó rất hạn chế.

Bạn có thể sử dụng oozie và cấu trúc decision với hai tập lệnh lợn.

22

Có, Pig cung cấp cấu trúc if-then-else, nhưng không được sử dụng theo cách bạn đang yêu cầu.

Pig của if-then-else is an arithmetic operator gọi với tốc ký "điều kiện true_value: false_value" như một phần của một biểu thức, chẳng hạn như:

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

Bạn phải đã có được nạp các bảng A để làm điều này . Để thực thi luồng điều khiển xung quanh toàn bộ câu lệnh Pig bạn sẽ cần một cái gì đó như oozie, như được gợi ý bởi Fakrudeen.

+0

Điều này làm việc cho các điều kiện dựa trên dữ liệu đang được xử lý, nhưng không phải điều kiện/cờ dựa trên các tham số bên ngoài. –

1

Tạo UDF (nói, bằng Java) và sau đó nhúng mã đó vào mã số PIG của bạn. Bạn sẽ cần phải 'đăng ký' tệp jar mà bạn tạo sau khi viết UDF.

// (một cái gì đó như thế này), nói Java của bạn UDF classUDFCondition & được tạo ra jar tập tin là PigUDFCondition.jar, sau đó trong PIG Code

đăng ký của bạn PigUDFCondition.jar

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

Có Tuyên bố CASE có sẵn từ phiên bản 0.12 trở đi.

+0

Và điều này sẽ giúp ích như thế nào? Bạn có thể mở rộng câu trả lời của bạn bằng một ví dụ? – dakab

Các vấn đề liên quan