簡體   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