我想过滤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阿维纳什,电流,桑迪普,3,字符,44,M,33,11,10,12,33,22,39,12,23,19,35至尊,储蓄,普拉巴什,4,字符,55,F,22,12,23,12,44,56,7,88,34,23,68拉维,电流,涅槃,5,字符,33,M,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
x = (40) 的值,存储为元组。
上述数据的最后一列表示flight_delay_time。
我通过以下方式提取 X 的值。
以下是存储在C_CONTROL_BATCH.txt
中的数据25354015
我使用以下代码提取 X 的值。
control_batch = LOAD 'C_CONTROL_BATCH.txt' AS (start:int);
variable = ORDER control_batch BY start DESC;
X = LIMIT starttime 1;
这是解决方案:
输入
我们有两个输入文件:
-
航空公司数据.txt - 拥有原始数据拉维,储蓄,阿维纳什,2,字符,33,F,22,44,12,13,33,44,22,11,10,22,26阿维纳什,电流,桑迪普,3,字符,44,M,33,11,10,12,33,22,39,12,23,19,35至尊,储蓄,普拉巴什,4,字符,55,F,22,12,23,12,44,56,7,88,34,23,68拉维,电流,涅槃,5,字符,33,M,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
-
x.txt - 从哪里获得 x 值的数据 -20303538374029
flight_delay_time列是下面关系中的最后一列,类型为 int。
注意 - 如果你不在这里声明它,程序会抛出一个异常,当你最后过滤时,它不能从byterarray转换为int。
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:int);x_data = LOAD 'x.txt' USING PigStorage() AS (x_val:int);
order_x_data = 按x_val x_data排序;
max_value = 限制order_x_data 1;
在这里,我们再次将值转换为 int 以使过滤条件正常工作。
max_value_casted = FOREACH max_value生成 $0 作为 (maxval:int);
最后,我们可以发出过滤器查询来获取结果。请注意下面如何使用 .max_value_casted关系中的运算符。
output_data = 按 flight_delay_time
倾倒output_data;
输出 - 小于最大值 X 的值 (40)
(拉维,储蓄,阿维纳什,2,字符,33,F,22,44,12,13,33,44,22,11,10,22,26)(阿维纳什,电流,桑迪普,3,字符,44,M,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)
希望对:)有所帮助