2016-08-11 3 views
0

スパークのREPL(スパーク2.0.0)は、次のエラーを投げることになる理由を任意のアイデア:使用した場合の値が見つからない:スパークのScalaのREPLでの負荷

scala> :load ../StatsWithMissing.scala 
Loading ../StatsWithMissing.scala... 
import org.apache.spark.util.StatCounter 
defined class NAStatCounter 
<console>:22: error: illegal start of statement (no modifiers allowed here) 
    override def toString: String = 
^
<console>:26: error: not found: value stats 
      "stats " + stats.toString + "NaN " + missing 
<console>:26: error: not found: value missing 
     "stats " + stats.toString + "NaN " + missing 

<console>:1: error: eof expected but '}' found. 
} 
^ 
defined object NAStatCounter 
warning: previously defined class NAStatCounter is not a companion to object  NAStatCounter. 
Companions must be defined together; you may wish to use :paste mode for this. 
<console>:27: error: value add is not a member of NAStatCounter 
    def apply(x: Double) = new NAStatCounter().add(x) 

次のファイルをロードする場合:

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: String = 
    { 
    "stats " + stats.toString + "NaN " + missing 
    } 
} 

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

:Load ../StatsWithMissing.scalaを使用すると、エラーを生成しますが、NAStatCounterを作成しようとしたとき、私は次のエラーを取得できません:

scala> :paste ../StatsWithMissing.scala 
Pasting file ../StatsWithMissing.scala... 
import org.apache.spark.util.StatCounter 
defined class NAStatCounter 
defined object NAStatCounter 

scala> val nas1 = NAStatCounter(10.0) 
<console>:28: error: reference to NAStatCounter is ambiguous; 
it is imported twice in the same scope by 
import $line48$read.NAStatCounter 
and import INSTANCE.NAStatCounter 
     val nas1 = NAStatCounter(10.0) 
       ^

答えて

0

あなたはK & R中かっこを使用せず、replが行ごとに解釈するので、開き中括弧はクラスの本体ではありません。

class NAStatCounter {を試してください。つまり、同じ行にブレースを付けてください。

それ以外の場合、class Cは単独で完全な定義です。 K&Rへの切り替え

+0

は異なるエラーをもたらす: インポートorg.apache.spark.util.StatCounter :13:エラー:見つかりません:タイプスタッツ ヴァル統計:スタッツ=新しいスタッツ() :13:エラー:見つかりません:タイプスタッツ ヴァル統計:スタッツは=新しいスタッツ() :26:エラー:見つかりません:タイプNAStatCounter をDEF(X:ダブル)が適用されます。新しいNAStatCounter(=)、実際に(X) – Ikhalaf

+0

を追加使用して':paste'は、ブレースの問題とコンパニオンの定義を修正します。スパークシェルが正しくインポートを行っているバグにぶつかっているかもしれません。私は後で試してみる。誰かが最初に答えない限り。 –

+0

修正:両方の問題を修正しました。この時点で私はなぜこれが好奇心から起こっているのか理解しようとしています。ありがとうございました。 – Ikhalaf

関連する問題