Scala中的相同类型不匹配
下面的代码片段来自Scala中的相同类型不匹配,scala,apache-spark,rdd,Scala,Apache Spark,Rdd,下面的代码片段来自rdd是rdd[(字符串,向量)],但不幸的是,我的Scala编译器抱怨错误类型不匹配,预期:rdd[(字符串,向量)],实际:rdd[(字符串,向量)]我调用flagVectorOutlier(rdd,predictedRDD) 考虑到实际类型和预期类型相同,这里的错误点是什么?我怎样才能解决这个问题?我以前遇到过这种错误。 它发生在我使用java库时,该库将使用java.util.List,而我自己的代码使用的是scala.collection.immutable.List
rdd
是rdd[(字符串,向量)]
,但不幸的是,我的Scala编译器抱怨错误类型不匹配,预期:rdd[(字符串,向量)],实际:rdd[(字符串,向量)]
我调用flagVectorOutlier(rdd,predictedRDD)
考虑到实际类型和预期类型相同,这里的错误点是什么?我怎样才能解决这个问题?我以前遇到过这种错误。 它发生在我使用java库时,该库将使用
java.util.List
,而我自己的代码使用的是scala.collection.immutable.List
,我把它们混在了一起
您可以轻松地让两个同名的类在代码中共存,但错误消息不会显示完全限定的名称,因此我会得到类型不匹配,预期为:List[Integer],实际为:List[Integer]
,这似乎令人费解。解决方案只是完全限定输入参数的类型,或者使用typedef来区分它们
另外,我在元组方面也遇到了类似的问题。例如,当方法可以期望元组或直接参数时:
def(param:(Integer,String))
与def(param1:Integer,param2:String)
当使用错误的参数(例如,2个参数而不是一个元组)调用该方法时,在粗略检查时,错误消息似乎显示两种相同的类型。如果有多个嵌套元组(因此括号太多但类型相同),则情况会更糟.你的导入是什么样子的?@LionelPort我正在使用这些导入:
导入org.apache.spark.SparkConf
导入org.apache.spark.rdd.rdd
导入org.apache.spark.streaming.导入org.apache.spark.streaming.StreamingContext导入org.apache.spark.mllib.linalg.Vectors导入org.apache.spark.mllib.clustering.StreamingKMeans
如果将该类型说明符添加到foreachRDD(rdd:rdd[(String,Vector)]…?这些是Java字符串和向量类吗?可能您在scala.collection.immutable.Vector和Apache版本上有冲突?尝试在函数def type声明中指定完整的导入名称。很高兴我能提供帮助。搜索“scala重命名导入”如果你不想在ApacheVector类的任何地方都使用完整的导入路径,谢谢!在我的例子中,这实际上是因为我正在学习Martin Odersky()的“Scala函数编程原理”课程和“列表”在以前的课程中定义的类已经覆盖了内置的scala.collection.immutable.List。再次感谢!
def someFunction() {
testData.foreachRDD( rdd => {
val vectorsRDD = rdd.map( pair => pair._2 )
val predictedRDD = model.latestModel().predict( vectorsRDD )
flagVectorOutlier( rdd, predictedRDD )
} )
ssc.start()
ssc.awaitTermination()
}
def flagVectorOutlier(testVectors: RDD[(String, Vector)], predicts: RDD[Int]): Unit = {
}