2017-08-24 32 views
0

爲什麼我得到的錯誤斯卡拉 - 錯誤:語句的非法啓動(允許在這裏沒有修飾符)

加載從火花外殼下面的代碼(包裹在一個.scala文件)時
error: illegal start of statement (no modifiers allowed here) 
override def toString = { 
^ 

(火花版本2.2.0,Scala版本2.11.8)?

import org.apache.spark.util.StatCounter 

class NAStatCounter extends Serializable 
{ 
    val stats: StatCounter = new StatCounter() 
    var missing: Long = 0 

    def add(x: Double): NAStatCounter = { 
    if (java.lang.Double.isNaN(x)) { 
     missing += 1 
    } else { 
     stats.merge(x) 
    } 
    this 
    } 

    def merge(other: NAStatCounter): NAStatCounter = { 
    stats.merge(other.stats) 
    missing += other.missing 
    this 
    } 

    override def toString = { 
    "stats: " + stats.toString + " NaN: " + missing 
    } 
} 

object NAStatCounter extends Serializable { 
    def apply(x: Double) = new NAStatCounter().add(x) 
} 

這是從一本書中的示例代碼和它看起來怪異,我得到這個錯誤...

+0

這是代碼逐字?該錯誤是一個解析錯誤,我無法重現它。 –

+0

這很奇怪。我從頭開始重寫代碼,比較工具表示它是相同的代碼,但現在得到錯誤 錯誤:未找到:鍵入StatCounter(在第5行) – user1403546

+0

好的,我必須將開啓的大括號類定義的同一行,但仍然出現「error:not found:type StatCounter」 – user1403546

回答

0

toString方法返回一個字符串所以只需添加返回類型吧。

override def toString: String = { 
    "stats: " + stats.toString + " NaN: " + missing 
    } 
+0

非常感謝您的回答,但這是一個解析錯誤。使用:粘貼上面的代碼可以正常工作 – user1403546