火花流中的广播变量空指针异常
Posted
技术标签:
【中文标题】火花流中的广播变量空指针异常【英文标题】:Broadcast variable Null pointer exception in spark streaming 【发布时间】:2015-06-23 15:04:18 【问题描述】:我有一个 Spark 流应用程序,我需要在其中访问保存在 HashMap 中的模型。 在本地安装中使用广播变量运行相同的代码没有问题。但是,当我将它部署在我的 spark 测试集群上时,我得到了一个空指针异常。
我已将模型存储在可序列化的 HashMap 中。我使用声明为全局静态变量的广播变量来广播此哈希图:
public static Broadcast<HashMap<String,FieldModel>> br;
HashMap<String,FieldModel> hm = checkerObj.getModel(esserver, type);
br = ssc.sparkContext().broadcast(hm);
我需要在我的映射器阶段访问这个模型,并根据检查进行一些操作。以下是我如何访问广播变量的 sn-p。
JavaDStream<Tuple3<Long,Double,String>> split = matched.map(new GenerateType2Scores());
class GenerateType2Scores implements Function<String, Tuple3<Long, Double, String>>
@Override
public Tuple3<Long, Double, String> call(String s) throws Exception
Long time = Type2ViolationChecker.getMTS(s);
HashMap<String,FieldModel> temphm= Type2ViolationChecker.br.value();
Double score = Type2ViolationChecker.getAnomalyScore(temphm,s);
return new Tuple3<Long, Double, String>(time,score, s);
temphm 应该引用存储在广播变量中的 hashmap。 谁能帮我理解在 JAVA 中访问广播变量的正确方法是什么?
我创建了一个要点来引用代码:https://gist.github.com/nipunarora/ed987e45028250248edc
【问题讨论】:
广播变量不应该是静态的。 【参考方案1】:感谢@user52045,我找到了答案。
广播变量必须声明为 final,并且不能声明为 static 用于全局引用:P
【讨论】:
我有类似的问题,这里有什么问题***.com/questions/64003697/… ***.com/questions/63935600/… 如果广播变量必须声明为 final ,如果是这样,这是否可以在 UDF 内部访问而不作为参数传递?以上是关于火花流中的广播变量空指针异常的主要内容,如果未能解决你的问题,请参考以下文章