変数を使用して、2つの変数値の範囲内のエントリを選択したいとします。私のSQLクエリはString sql = "Select count(*) FROM Records WHERE event_time <= UPPERTIME('1') AND event_time >= LOWERTIME('1')";
です。このクエリUPPERTIME('1')
とLOWERTIME('1')
でUDFとそこ定義はSpark 2.1.1:ストラクチャードストリーミングクエリに変数をバインドする方法
spark.udf().register("LOWERTIME", new UDF1 < String, String >() {
@Override public String call(String lowertime) {
System.out.println("lowerTime="+lowerTime.toString());
return lowerTime.toString();
}
}, DataTypes.StringType);
spark.udf().register("UPPERTIME", new UDF1 < String, String >() {
@Override public String call(String uppertime) {
System.out.println("upperTime="+upperTime.toString());
return upperTime.toString();
}
}, DataTypes.StringType);
されているUDFに渡される引数はダミーであり、私は実際にはグローバル変数「upperTimeとlowerTime」を返しています。
上記のクエリを実行すると、テーブル内のすべてのエントリの数が表示されますが、条件によっては、指定した範囲内のエントリ数に対応する数が表示されます。何がうまくいかないのですか?
ありがとう@zsxwingしかし、SQLクエリでバインドする変数は読み取り専用ではなく、特定の条件が満たされた後に一定の値だけ増分したいと考えています。 – kadsank
Sparkの仕事中にあなたの変更をブロードキャストできるとは思いません。また、データの処理順序を前提としているようですか?それは通常間違っている。 – zsxwing