繁体   English   中英

HashMap 作为 Spark Streaming 中的广播变量?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM