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