我想过滤其flight_delay_time小于某些特定值(x)的数据集A的记录。
但是我会从另一个猪查询得到x的值,这是一个元组,在某种意义上x是一个元组。
但是使用以下语句会引发错误:
B = FILTER A by flight_delay_time < x;
dump B;
文件A中的数据采用以下方式;
拉维,储蓄,阿维纳什,2,炭,33,F,22,44,12,13,33,44,22,11,10,22,26 阿维纳什,电流,和Sandeep,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 LAVI,电流,nirmesh,5,炭,33,M 11,10,33,34,56,78,54,23,445,66,77 Venkat,储蓄,兔子,6,炭,11,F,99,12,34,55,33,23,45,66,23,23,28
x =(40)的值,它存储为元组。
上述数据中的最后一列表示flight_delay_time。
我以下列方式提取X的值。
以下是存储在C_CONTROL_BATCH.txt
中的数据25 35 40 15
我使用以下代码来提取X的值。
control_batch = LOAD 'C_CONTROL_BATCH.txt' AS (start:int);
variable = ORDER control_batch BY start DESC;
X = LIMIT starttime 1;
答案 0 :(得分:1)
以下是解决方案:
<强> INPUT 强>
我们有两个输入文件:
airlinesdata.txt - 拥有rawdata 拉维,储蓄,阿维纳什,2,炭,33,F,22,44,12,13,33,44,22,11,10,22,26 阿维纳什,电流,和Sandeep,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 LAVI,电流,nirmesh,5,炭,33,M 11,10,33,34,56,78,54,23,445,66,77 Venkat,储蓄,兔子,6,炭,11,F,99,12,34,55,33,23,45,66,23,23,28
x.txt - 从我们获取x值的数据 - 20 三十 35 38 37 40 29
flight_delay_time列是以下关系中的最后一列,类型为int。
注意 - 如果你没有在这里声明它,程序会抛出一个异常,当你最后过滤时它无法从byterarray转换为int。
rawdata = LOAD&#39; airlinesdata.txt&#39;使用PigStorage(&#39;,&#39;)AS(field1:chararray,field2:chararray,field3:chararray,field4:chararray,field5:chararray,field6:chararray,field7:chararray,field8:chararray,field9:chararray ,字段10:chararray,field11:chararray,field12:chararray,field13:chararray,field14:chararray,field15:chararray,field16:chararray,field17:chararray,flight_delay_time:INT);
x_data = LOAD&#39; x.txt&#39;使用PigStorage()AS(x_val:int);
order_x_data = ORDER x_data BY x_val desc;
max_value = LIMIT order_x_data 1;
这里我们再次将值转换为int,以使过滤条件起作用。
max_value_casted = FOREACH max_value GENERATE $ 0 as(maxval:int);
最后,我们可以发出过滤查询来获取结果。 注意如何使用下面的访问maxval。来自max_value_casted关系的运算符。
output_data = FILTER rawdata BY flight_delay_time&lt; max_value_casted.maxval;
DUMP output_data;
OUTOUT - 小于X(40)
的最大值的值(拉维,储蓄,阿维纳什,2,炭,33,F,22,44,12,13,33,44,22,11,10,22,26) (阿维纳什,电流,和Sandeep,3,炭,44,男,33,11,10,12,33,22,39,12,23,19,35) (Venkat,储蓄,兔子,6,炭,11,F,99,12,34,55,33,23,45,66,23,23,28)
希望有所帮助:)