簡體   English   中英

為什么 Java HashMap put 在 Spark Scala 中不起作用?

[英]Why Java HashMap put is not working in Spark Scala?

我有一個示例 Spark 數據框,如下所示:

val mydf1 = Seq((1, "a"), (2, "b"),(3, "c"),(4, "d"),(5, "e")).toDF("id", "col2")

scala> mydf1.show
+---+----+
| id|col2|
+---+----+
|  1|   a|
|  2|   b|
|  3|   c|
|  4|   d|
|  5|   e|
+---+----+

我正在嘗試將上述數據幀添加到 Java util HashMap 中,如下所示:

import java.util._
val jmap = new java.util.HashMap[Integer, String]()

mydf1.rdd.foreach{case Row(id: Integer, col2: String) => jmap.put(id, col2)}

但是在上面的代碼之后,我仍然沒有看到 ids 和 col2s 被添加到 jmap HashMap 中,如下所示:

scala> jmap.size
res13: Int = 0

我在我的實現中遺漏了什么嗎?

我知道我可以使用 Scala 轉換器,但出於某種原因我不想使用它。

RDD 是分布在集群中不同執行器中的分布式集合,並且在執行器節點中執行foreach jmap是一個本地集合對象,雖然它被發送到單獨的執行器(因為它在foreach 中被調用),但它不會返回給驅動程序附加值。

一種方法是,收集驅動程序中的所有 rdd 值並將它們添加到jmap 中(但這對於大型收集來說是不可取的)

mydf1.rdd.collect().foreach{case Row(id: Integer, col2: String) => jmap.put(id, col2)}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM