[英]How to cast Any Scala to Double
我正在迭代一个数据框,需要对每一行应用一些自定义代码,所以我正在这样做
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 类型的变量,值需要是 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[Double] 不是正确的解决方案,对此的解决方案是什么?
虽然这并不能完全回答我的问题陈述,而且我正在尝试阅读有关如何收集结果的累加器,但逻辑的主要部分可以在convertedPaths.forEach 循环中运行。
我能够通过分配来解决我的问题
var cFMap = Map[String, Long]()
代替
var cFMap = Map[String, Any]()
正如我所知,convertedPaths 中的所有列都是 Long 类型
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.