我正在尝试计算数据集中有多少值与过滤条件匹配,但是当过滤器不匹配任何条目时我遇到了问题。
我的结构中有很多列data
,但这个示例只有三个列:key
- 集合的数据键(不是唯一的),value
- 记录的浮点值,nominal_value
- 表示标称值的浮点值。
我们现在的用例是找到比标称值低 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;
在大多数情况下,没有超出标称范围的值,因此filtered_data
为空(或 null。不知道如何分辨。)。这filtered_count
也导致为空/空,这是不可取的。
如何构造一个在filtered_data
为空/空时返回值 0 的语句?我尝试了几个我在网上找到的选项:
-- Extra parens in COUNT required to avoid syntax error
filtered_count = FOREACH (GROUP filtered_data BY key) GENERATE COUNT((filtered_data.value is null ? {} : filtered_data.value));
这导致:
Two inputs of BinCond must have compatible schemas. left hand side: #1259:bag{} right hand side: #1261:bag{#1260:tuple(cf#1038:float)}
和:
filtered_count = FOREACH (GROUP filtered_data BY key) GENERATE (filtered_data.value is null ? 0 : COUNT(filtered_data.value));
这导致空/空结果。