Apache spark Spark 2.1.1:如何将变量绑定到结构化流式查询

Apache spark Spark 2.1.1:如何将变量绑定到结构化流式查询,apache-spark,user-defined-functions,spark-structured-streaming,Apache Spark,User Defined Functions,Spark Structured Streaming,我想使用变量来选择两个变量值范围内的条目。我的SQL查询是String SQL=“Select count(*)FROM event_time=LOWERTIME('1')”的记录。在这个查询中,UPPERTIME('1')和LOWERTIME('1')是自定义项,有定义 spark.udf().register(“LOWERTIME”,新UDF1(){ @重写公共字符串调用(字符串下限时间){ System.out.println(“lowerTime=“+lowerTime.toString

我想使用变量来选择两个变量值范围内的条目。我的SQL查询是
String SQL=“Select count(*)FROM event_time=LOWERTIME('1')”的记录。在这个查询中,
UPPERTIME('1')
LOWERTIME('1')
是自定义项,有定义

spark.udf().register(“LOWERTIME”,新UDF1(){
@重写公共字符串调用(字符串下限时间){
System.out.println(“lowerTime=“+lowerTime.toString());
返回lowerTime.toString();
}
},DataTypes.StringType);
spark.udf().register(“UPPERTIME”,新UDF1(){
@重写公共字符串调用(字符串上限时间){
System.out.println(“upperTime=“+upperTime.toString());
返回upperTime.toString();
}
},DataTypes.StringType);
传递给UDF的参数是伪参数,我实际返回的是全局变量“upperTime和lowerTime”


当我运行上面的查询时,它显示表中所有条目的计数,但根据条件,它应该显示与给定范围内条目数相对应的计数。出了什么问题?

我猜您在驱动程序中更改了这些全局变量,而执行器没有看到这些更改。执行器进程通常位于不同的节点上,因此它无法访问另一节点中另一进程中的正常变量


通常,在Spark中使用全局变量是个坏主意。Spark提供在执行器和驱动程序之间共享变量。

谢谢@zsxwing,但是我想与SQL查询绑定的变量不是只读的,而是在满足特定条件后,我想通过一些常量值来增加它们。我认为您不能在Spark作业期间广播您的更改。此外,似乎您假定了处理数据的顺序?这通常是错误的。