How to compare two tuples in PIG?

Refresh

November 2018

Views

464 time

0

I want to filter the records of data set A whose flight_delay_time is less than some specific values(x).

But I will get the value of x from another pig query which is a tuple in the sense x is a tuple.

But using the following statement is throwing an error:

B = FILTER A by flight_delay_time < x;
dump B;

The data in file A is in the following way;

ravi,savings,avinash,2,char,33,F,22,44,12,13,33,44,22,11,10,22,26 avinash,current,sandeep,3,char,44,M,33,11,10,12,33,22,39,12,23,19,35 supreeth,savings,prabhash,4,char,55,F,22,12,23,12,44,56,7,88,34,23,68 lavi,current,nirmesh,5,char,33,M,11,10,33,34,56,78,54,23,445,66,77 Venkat,savings,bunny,6,char,11,F,99,12,34,55,33,23,45,66,23,23,28

the value of x = (40) which is stored as a tuple.

the last column in the above data denotes the flight_delay_time.

I am extracting the value of X in the following way.

following is the data stored in C_CONTROL_BATCH.txt

25 35 40 15

I used following code to extract the value of X.

control_batch = LOAD 'C_CONTROL_BATCH.txt' AS (start:int);
variable = ORDER control_batch BY start DESC;
X = LIMIT starttime 1;

1 answers

1

Вот решение:

ВХОД

У нас есть два входных файлов:

  1. airlinesdata.txt - Наличие RAWDATA Ravi, сбережения, Авинаш, 2, символ, 33, F, 22,44,12,13,33,44,22,11,10,22,26 Авинаш, ток, Сандип, 3, символ, 44, М, 33,11,10,12,33,22,39,12,23,19,35 supreeth, сбережения, prabhash, 4, символ, 55, F, 22,12,23,12,44 , 56,7,88,34,23,68 Лави, ток, nirmesh, 5, символ, 33, М, 11,10,33,34,56,78,54,23,445,66,77 Венкат, сбережения, кролик , 6, символ, 11, F, 99,12,34,55,33,23,45,66,23,23,28

  2. x.txt - Имея данные , откуда мы получаем значение х - 20 30 35 38 37 40 29

колонка flight_delay_time является последней колонке ниже соотношения и типа междунар.

Примечание - Если вы не объявляете его здесь программы с брошены исключением, что не может бросить из byterarray в целое, когда фильтр в конце.

RAWDATA = НАГРУЗКА 'airlinesdata.txt' ИСПОЛЬЗОВАНИЕ PigStorage ( '') AS (field1: chararray, Field2: chararray, field3: chararray, Field4: chararray, Field5: chararray, field6: chararray, field7: chararray, field8: chararray, field9 : chararray, field10: chararray, field11: chararray, field12: chararray, field13: chararray, field14: chararray, field15: chararray, field16: chararray, field17: chararray, flight_delay_time: целое);

x_data = НАГРУЗКА 'x.txt' ИСПОЛЬЗОВАНИЕ PigStorage (), как (x_val: Int);

order_x_data = ORDER BY x_data x_val по алфавиту;

MAX_VALUE = ПРЕДЕЛ order_x_data 1;

Здесь мы снова заливка значения INT для условия работы фильтра.

max_value_casted = FOREACH max_value GENERATE $ 0 как (MAXVAL: междунар);

Наконец, мы можем выдать запрос фильтра, чтобы получить результаты. Обратите внимание, как MAXVAL доступен ниже, используя. оператор из max_value_casted отношения.

output_data = ФИЛЬТР RAWDATA ПО flight_delay_time <max_value_casted.maxval;

DUMP output_data;

Outout - значения меньше, чем максимальное значение Х (40)

(Ravi, сбережения, Авинаш, 2, символ, 33, F, 22,44,12,13,33,44,22,11,10,22,26) (Авинаш, ток, Сандип, 3, символ, 44, М, 33,11,10,12,33,22,39,12,23,19,35) (Венкат, сбережение, кролик, 6, символ, 11, F, 99,12,34,55,33,23 , 45,66,23,23,28)

Надеюсь, поможет :)