[英]HashMap as a Broadcast Variable in Spark Streaming?
我有一些数据需要在火花流中进行分类。 分类键值在程序开始时加载到 HashMap 中。 因此,每个传入的数据包都需要与这些密钥进行比较并相应地进行标记。
我意识到 spark 具有称为广播变量和累加器的变量来分发对象。 教程中的示例使用简单的变量,如等。
如何使用 HashMap 在所有 spark 工作人员上共享我的 HashMap。 或者,有没有更好的方法来做到这一点?
我正在用 Java 编写我的 Spark 流应用程序。
在 spark 中,您可以以相同的方式广播任何可序列化的对象。 这是最好的方法,因为您只将数据传送给工作人员一次,然后您就可以在任何任务中使用它。
斯卡拉:
val br = ssc.sparkContext.broadcast(Map(1 -> 2))
爪哇:
Broadcast<HashMap<String, String>> br = ssc.sparkContext().broadcast(new HashMap<>());
这是一个更好的示例,说明如何在 Java 中广播 HashMap:
在您的 Spark 应用程序中,您将创建或加载一个 HashMap。 然后使用 Sparksession 广播该 HashMap。
HashMap<String,String> bcMap = new HashMap();
bcMap.put("key1","val1");
bcMap.put("key2","val2");
Broadcast<HashMap> bcVar = this.sparkSession.sparkContext().broadcast(bncFlowConflg, classTag(HashMap.class));
你需要下面的类来创建一个 classTag:
private static <T> ClassTag<T> classTag(Class<T> clazz) {
return scala.reflect.ClassManifestFactory.fromClass(clazz);
}
您可以参考 Spark 函数中的广播,例如 map 如下:
HashMap<String,String> bcVal = bcVar .getValue();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.