0
我有這個斯卡拉片段從一個自定義的映射(用於一個星火mapPartitions
)我正在寫計算同時多個Int
字段的直方圖。類型不匹配在Scala地圖從getOrElse返回等於
def multiFeatureHistogramFunc(iter: Iterator[Row]) : Iterator[(Int, (Int, Long))] = {
var featureHistMap:Map[Int, (Int, Long)] = Map()
while (iter.hasNext)
{
val cur = iter.next;
indices.foreach({ index:Int =>
val v:Int = if (cur.isNullAt(index)) -100 else cur.getInt(index)
var featureHist:Map[Int, Long] = featureHistMap.getOrElse(index, Map())
val newCount = featureHist.getOrElse(v,0L) + 1L
featureHist += (v -> newCount)
featureHistMap += (index -> featureHist)
})
}
featureHistMap.iterator
}
但我得到的錯誤是這樣的:
<console>:49: error: type mismatch;
found : Equals
required: Map[Int,Long]
var featureHist:Map[Int, Long] =
featureHistMap.getOrElse(index, Map())
^
我無法找到這個問題的答案具體問題。它在我看來像featureHistMap.getOrElse
中的默認參數是一個不同於featureHistMap
本身的值字段的類型,並且共同父類型是Equals
,因此這會導致類型不匹配。我嘗試了許多不同的東西,例如將默認參數更改爲更具體的類型,但這只是導致了不同的錯誤。
有人可以解釋這裏發生了什麼,以及如何解決它?
謝謝,很清楚。我誤解了有關Map的與元組的關係。 –