static变量最好不要用,应该使用Spark提供的广播变量和累加器
Broadcast Accumulator
static变量会引发的问题:
1、 类的static变量不会被序列化,序列化task的时候,值会丢失
2、static变量保存在内存模型中的方法区,会影响(同一个Excuter的线程)其他task的值。
3、演算子内使用外部变量,特别是 执行action(如输出结果到HDFS上,条件是变量的值)
如果每次变量的值不同,产生的task也可能不同,结果自然就不同了
static变量最好不要用,应该使用Spark提供的广播变量和累加器
Broadcast Accumulator
static变量会引发的问题:
1、 类的static变量不会被序列化,序列化task的时候,值会丢失
2、static变量保存在内存模型中的方法区,会影响(同一个Excuter的线程)其他task的值。
3、演算子内使用外部变量,特别是 执行action(如输出结果到HDFS上,条件是变量的值)
如果每次变量的值不同,产生的task也可能不同,结果自然就不同了