2016-04-12 3 views
0

Scala/Sparkコードをオンラインで見つけたら、直接スパークシェルに貼り付けて試してみたいと思います。 (私はCentOSとMac OSの両方でSpark-shellを使用しています)spark-shellはドット/ピリオドで始まるScala行を解析できません

一般的に、この方法はうまくいきますが、行がドット/ピリオドで始まる(常にメソッド呼び出しを続けている)ときには常に問題があります。ドットを前の行に移動すると、それは機能します。

例:ここで私はオンラインで見つけるいくつかのコードです:しかし、ときに私の代わりに動きを

scala> val paramMap = ParamMap(lr.maxIter -> 20) 
paramMap: org.apache.spark.ml.param.ParamMap = 
{ 
    logreg_d63b85553548-maxIter: 20 
} 

scala> .put(lr.maxIter, 30) 
<console>:1: error: illegal start of definition 
     .put(lr.maxIter, 30) 
     ^

scala> .put(lr.regParam -> 0.1, lr.threshold -> 0.55) 
<console>:1: error: illegal start of definition 
     .put(lr.regParam -> 0.1, lr.threshold -> 0.55) 
     ^

:だから

val paramMap = ParamMap(lr.maxIter -> 20) 
    .put(lr.maxIter, 30) 
    .put(lr.regParam -> 0.1, lr.threshold -> 0.55) 

私が直接火花シェルにこれを貼り付け、私はこのエラーが表示前の行へのドット、すべてが大丈夫です。 (彼らはドットで終わっていない場合でも、それはラインを続けるように同等か、)

scala> val paramMap = ParamMap(lr.maxIter -> 20). 
    | put(lr.maxIter, 30). 
    | put(lr.regParam -> 0.1, lr.threshold -> 0.55) 
paramMap: org.apache.spark.ml.param.ParamMap = 
{ 
    logreg_d63b85553548-maxIter: 30, 
    logreg_d63b85553548-regParam: 0.1, 
    logreg_d63b85553548-threshold: 0.55 
} 

それは、ドットで始まる行を受け入れるように、スパーク・シェルを設定する方法はありますか?

答えて

3

何の先頭の空白があってはいけません。

scala> "3" 
res0: String = 3 

scala> .toInt 
res1: Int = 3 

scala> "3" 
res2: String = 3 

scala> .toInt 
<console>:1: error: illegal start of definition 
    .toInt 
^

PS:ドットが検出されると、空白を無視する必要があります。その関心事にJIRAが追加されましたhere

+0

ps)多分、ドット選択を検出する際に先行する空白を無視すべきです。 –

+0

https://issues.scala-lang.org/browse/SI-9749 –

3

:pasteのコマンドを使用します。

scala> :paste 
// Entering paste mode (ctrl-D to finish) 

if (true) 
    print("that was true") 
else 
    print("false") 

// Exiting paste mode, now interpreting. 

that was true 
+0

コードを貼り付けるときはいつでも、 ":paste"と入力するのは本当に不便です。 – stackoverflowuser2010

0

あなたもこれがある中括弧

val paramMap = { ParamMap(lr.maxIter -> 20) 
    .put(lr.maxIter, 30) 
    .put(lr.regParam -> 0.1, lr.threshold -> 0.55) 
} 

を使用して式をラップすることができます:REPLは「貪欲」であるので、それにコードのブロックを貼り付けしようとすると、あなたが入力し最初の完全な声明を消費詳細は

を失敗する可能性があります参照してください。http://alvinalexander.com/scala/scala-repl-how-to-paste-load-blocks-of-source-code

も便利な機能:paste -raw

あり

http://docs.scala-lang.org/overviews/repl/overview.html

関連する問題