簡體   English   中英

在 Scala 中將 IndexedSequence[Map[String, Map[String, Int]]] 轉換為 Map[String, Map[String, Int]]

[英]Converting an IndexedSequence[Map[String, Map[String, Int]]] to Map[String, Map[String, Int]] in Scala

我是 Scala 的初學者,我有一個案例,我試圖獲取數據幀中的特定列並將其傳遞給另一種方法進行進一步處理。

在這種情況下,我能夠將列值作為字符串獲取。 我可以做以下兩者之一:

  1. 將字符串轉換為 Map[String, Map[String, Int]]

  2. 將 IndexedSequence[Map[String, Map[String, Int]]] 轉換為 Map[String, Map[String, Int]]

我的數據框中的值如下:

[endGoal -> [a -> 10, b -> 10], max -> [a -> 30, b -> 30]]

我試圖用來將字符串轉換為 Map[String, Map[String, Int]] 的代碼片段如下:

val map = recordArray(33) //Got the String
//Converting it to IndexedSequence[Map[String, Map[String, Int]]]
val result = for (line <- map; array = map.split(",").map(_.trim))
          yield Map(array.head -> array.tail.map(x => {val y = x.split(":"); (y(0).toString, y(1).toInt)}).toMap)

但是上面的代碼幫助我將它轉換為 IndexedSequence[Map[String, Map[String, Int]]]

我堅持將其轉換為 Map[String, Map[String, Int]]。 您能否舉例說明如何實現所需類型的值?

謝謝你。

基本上,我采取了錯誤的方法來解決問題..我的不好..我試圖做這樣的事情:

data.foreachPartition { rddpartition =>
    rddpartition.foreach { record =>
        var recordString = record.mkString(“,”)
      var recordArray = recordString.split(“,”)

這是我最終得到一個字符串的地方,然后我試圖將字符串轉換為 Map[String, Map[String, Int]] 並最終得到 IndexedSequence[Map[String, Map[String, Int]]]。

找到2個解決方案:

  1. 根據我上面的嘗試,添加:

     result.toList.flatten.toMap

將 IndexedSequence[Map[String, Map[String, Int]]] 轉換為 Map[String, Map[String, Int]]

  1. 我應該通過這樣做直接從數據框中獲取 Map[String, Map[String, Int]] :

     data.foreachPartition { rddpartition => rddpartition.foreach { record => val uid = record.getAs[String]("uid") val advertiserId = record.getAs[String]("advertiserId") val time = record.getAs[Long]("time") val map = record.getAs[Map[String, Map[String, Int]]]("map") val crossDeviceUsers = record.getAs[mutable.WrappedArray[String]]("crossDeviceUsers")

暫無
暫無

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

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