我在迭代一个数据框,需要为每一行应用一些自定义代码,所以我这样做
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]不是正确的解决方案,可能是什么解决方案?
答案 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类型