2016-08-12 17 views
2

我想了一堆类传递给SparkConf.registerKryoClasses方法,它具有以下特征:类型不匹配与存在的类型里面选

registerKryoClasses: Array[Class[_]]) => SparkConf 

因为我可能会或可能不会有需要被班注册,我在Option包装,并尝试这种(以简化版本):

class SomeClass(val app: String, val classes: Option[Array[Class[_]]]) { 
    val conf = classes match { 
    case Some(cs) ⇒ new SparkConf() 
     .setAppName(app) 
     .registerKryoClasses(cs) 
    case None ⇒ new SparkConf() 
     .setAppName(app) 
    } 
    // more stuff 
} 

的IntelliJ让我有上cs类型不匹配,然后列出了预期和实际类型。他们是一样的。

我在这里错过了什么?

+0

我知道这是陈词滥调,但是你尝试重新启动吗?我偶尔会在PyCharm和IntelliJ上遇到类似问题,有时重新启动会有所帮助。其他时候,我必须使用“dumber”IDE来手动编译代码,以便IntelliJ能够识别代码确实是正确的。 – HMSCelestia

+2

复制粘贴此代码为我编译罚款。 –

+3

不要相信IntelliJ在编辑器中显示的错误,请检查它是否实际首先编译。 –

回答

0

下正常工作对我来说,

def someClass(app: String, classes: Option[Array[Class[Any]]]): SparkConf = { 
    val conf = classes match { 
    case Some(cs) ⇒ new SparkConf() 
     .setAppName(app) 
     .registerKryoClasses(cs) 
    case None ⇒ new SparkConf() 
     .setAppName(app) 
    // more stuff 
    } 

    conf 
} 

val conf = someClass("lol", Some(Array(classOf[String], classOf[Int]))) 
//org.apache.spark.SparkConf = [email protected]