Apache pig 清管器过滤器返回空袋,我可以';不算

Apache pig 清管器过滤器返回空袋,我可以';不算,apache-pig,Apache Pig,我试图计算一个数据集中有多少值与筛选条件匹配,但当筛选条件不匹配时,我遇到了问题 在我的数据结构中有很多列,但是在这个例子中只有三个使用:键-集合的数据键(不唯一),值-记录的浮点值,标称值-表示标称值的浮点值 我们现在的用例是找到低于标称值10%或更多的值的数量 我在做这样的事情: filtered_data = FILTER data BY value <= (0.9 * nominal_value); filtered_count = FOREACH (GROUP filtered_

我试图计算一个数据集中有多少值与筛选条件匹配,但当筛选条件不匹配时,我遇到了问题

在我的
数据
结构中有很多列,但是在这个例子中只有三个使用:
-集合的数据键(不唯一),
-记录的浮点值,
标称值
-表示标称值的浮点值

我们现在的用例是找到低于标称值10%或更多的值的数量

我在做这样的事情:

filtered_data = FILTER data BY value <= (0.9 * nominal_value);
filtered_count = FOREACH (GROUP filtered_data BY key) GENERATE COUNT(filtered_data.value);
DUMP filtered_count;
其结果是:

Two inputs of BinCond must have compatible schemas. left hand side: #1259:bag{} right hand side: #1261:bag{#1260:tuple(cf#1038:float)}
以及:


这将导致空/空结果。

按照您现在设置它的方式,您将丢失有关错误值计数为0的任何键的信息。相反,我建议保留所有键,这样您就可以看到计数为0的肯定确认,而不是通过缺席来推断。要做到这一点,只需使用一个指示符,然后
求和

data2 =
    FOREACH data
    GENERATE
        key,
        ((value <= 0.9*nominal_value) ? 1 : 0) AS bad;
bad_count = FOREACH (GROUP data2 BY key) GENERATE group, SUM(data2.bad);
data2=
FOREACH数据
生成
钥匙
((价值)
filtered_count = FOREACH (GROUP filtered_data BY key) GENERATE (filtered_data.value is null ? 0 : COUNT(filtered_data.value));
data2 =
    FOREACH data
    GENERATE
        key,
        ((value <= 0.9*nominal_value) ? 1 : 0) AS bad;
bad_count = FOREACH (GROUP data2 BY key) GENERATE group, SUM(data2.bad);