フィルター条件に一致するデータ セット内の値の数をカウントしようとしていますが、フィルターがエントリに一致しない場合に問題が発生します。
私のdata
構造には多くの列がありますが、この例で使用できるのは 3 つだけです: key
- セットのデータ キー (一意ではない) value
- 記録された float 値nominal_value
- 公称値を表す float。
現在の使用例は、公称値を 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
空/null になることもあり、望ましくありません。
filtered_data
空/nullのときに値 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));
空/nullの結果になります。