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