2016-05-28 11 views
-1

我一個迭代數據框,需要應用一些自定義代碼來的每一行,所以我做這個如何施放任何斯卡拉翻一番

convertedPaths.foreach { row : Row => 
    cFMap = row.getValuesMap(channelSet.toSeq) 

假設ChannelSet已集中所有列名的。現在我已經聲明cFMap類型爲[String,Any]作爲getValuesMap(正如我所理解的那樣將返回列的數據類型)

此外,所有列都是Long類型,所以我嘗試這樣做:

channelSet.foreach { key : String => 
    var frequency = cFMap.get(key).get.asInstanceOf[Double] 

    var value = c * frequency 

給出c是類型雙和值的變量需要爲c和頻率 的產品,但,讓我以下錯誤:

overloaded method value * with alternatives: (x: Double)Double <and> (x: Float)Double <and> (x: Long)Double <and> (x: Int)Double <and> (x: Char)Double <and> (x: Short)Double <and> (x: Byte)Double cannot be applied to (Any) 

爲什麼asInstanceOf [雙]不是正確的解決方案和可能的解決方案是什麼?

+2

哪裏'C'來自於「var value = c * frequency」語句和「c」類型是什麼? – Jesper

+0

請參閱:http://stackoverflow.com/q/33007840/1560062,但無論如何,如果convertedPaths是'DataFrame',則代碼無法正常工作。 – zero323

+0

@Jesper我的壞!編輯相同。 – hbabbar

回答

0

雖然這並不能完全回答我的問題陳述,但我想了解如何收集我的結果的累加器,但邏輯的主要部分可以在convertedPaths.forEach循環內運行。

我能夠通過分配

var cFMap = Map[String, Long]() 

,而不是

var cFMap = Map[String, Any]() 

解決我的問題,因爲我知道在convertedPaths的所有列是長型