我是spark和scala的新手,我用scala得出了一个编译错误:假设我们有一个rdd,这是一个这样的 Map :
val rawData = someRDD.map{
//some ops
Map(
"A" -> someInt_var1 //Int
"B" -> someInt_var2 //Int
"C" -> somelong_var //Long
)
}
然后,我想得到这些变量的直方图信息 . 所以,这是我的代码:
rawData.map{row => row.get("A")}.histogram(10)
并且编译错误说:
value histogram不是org.apache.spark.rdd.RDD的成员[Option [Any]]
我想知道为什么 rawData.map{row => row.get("A")}
是 org.apache.spark.rdd.RDD[Option[Any]]
以及如何将其转换为rdd [Int]?我试过这样的:
rawData.map{row => row.get("A")}.map{_.toInt}.histogram(10)
但它编译失败:
值toInt不是Option [Any]的成员
我很困惑,在这里寻求帮助 .
1 回答
你得到
Option
因为Map.get
返回一个选项;如果Map
中不存在该键,Map.get
将返回None;并且Option[Any]
也与Map的Value的杂项数据类型有关,你有Int和Long,在我的例子中它返回AnyVal
而不是Any
;一个可能的解决方案是使用
getOrElse
通过提供当键不存在,默认值摆脱的选项,如果你确信A
的 Value 始终是一个INT,可以将它从AnyVal
转换使用asInstanceOf[Int]
到Int
;简化示例如下: