如何将任何Scala转换为Double

时间:2016-05-28 14:22:43

标签: scala apache-spark casting

我在迭代一个数据框,需要为每一行应用一些自定义代码,所以我这样做

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是Double类型的变量,value必须是c和frequency的乘积 但这给了我以下错误:

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 [Double]不是正确的解决方案,可能是什么解决方案?

1 个答案:

答案 0 :(得分:0)

虽然这并没有完全回答我的问题陈述,但我试图读取有关如何收集结果的累加器,但逻辑的主要部分可以在convertedPaths.forEach循环中运行。

我能够通过分配

来解决我的问题
if (!String.IsNullorWhitespace(newVar))
    searchNewVar = " AND col_NewVar LIKE %" + newVar = "%";    
else searchNewVar = String.Empty;

而不是

var cFMap = Map[String, Long]() 

我知道convertedPaths中的所有列都是Long类型