Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
spark shell无法分析以点/句点开头的Scala行_Scala_Apache Spark - Fatal编程技术网

spark shell无法分析以点/句点开头的Scala行

spark shell无法分析以点/句点开头的Scala行,scala,apache-spark,Scala,Apache Spark,每当我在网上找到Scala/Spark代码时,我都想直接将其粘贴到sparkshell中进行尝试。(我正在CentOS和Mac OS上使用spark shell和spark 1.6。) 一般来说,这种方法工作得很好,但当行以点/句点开头时(表示继续调用方法),我总是遇到问题。如果我把点移到前一行,它就工作了 示例:以下是我在网上找到的一些代码: val paramMap = ParamMap(lr.maxIter -> 20) .put(lr.maxIter, 30) .put(

每当我在网上找到Scala/Spark代码时,我都想直接将其粘贴到sparkshell中进行尝试。(我正在CentOS和Mac OS上使用spark shell和spark 1.6。)

一般来说,这种方法工作得很好,但当行以点/句点开头时(表示继续调用方法),我总是遇到问题。如果我把点移到前一行,它就工作了

示例:以下是我在网上找到的一些代码:

val paramMap = ParamMap(lr.maxIter -> 20)
  .put(lr.maxIter, 30) 
  .put(lr.regParam -> 0.1, lr.threshold -> 0.55)
因此,当我将其直接粘贴到spark shell中时,我看到以下错误:

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)
         ^
是否有一种方法可以配置spark shell,使其能够接受以点开头的行(或等效的行,以便即使它们不以点结尾,它也能继续行)?

使用命令:


必须没有前导空格

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
  ^
scala>“3”
res0:String=3
scala>.toInt
res1:Int=3
scala>“3”
res2:String=3
scala>.toInt
:1:错误:定义的开始非法
托因先生
^

PS:当检测到一个点时,也许它应该忽略空白。在这个问题上加了一个JIRA。

你也可以用大括号把你的表情括起来

val paramMap = { ParamMap(lr.maxIter -> 20)
  .put(lr.maxIter, 30) 
  .put(lr.regParam -> 0.1, lr.threshold -> 0.55)
}
这是因为:REPL是“贪婪”的,并且使用您键入的第一条完整语句,因此尝试将代码块粘贴到其中可能会失败

有关更多详细信息,请参阅:

还有一个很好的功能
:粘贴-raw


请参见

Spark shell具有内置机制,允许粘贴多行Spark Scala代码或逐行写入Spark Scala代码:将代码包装在括号中
()
。不需要将点移动到行尾

在您的示例中,从
val paramMap=(
)开始。从这里,您可以手工编写每一行或粘贴到多行线性回归超参数代码中。然后在代码完成后再添加一个括号
。使用此方法时,不要使用制表符进行缩进,而是使用两个空格

完整代码示例:

scala> val paramMap = (ParamMap(lr.maxIter -> 20)
 |   .put(lr.maxIter, 30)
 |   .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)

ps)在检测点选择时,可能它应该忽略前导空格。当你想粘贴代码时,键入“:paste”真的很不方便。
scala> val paramMap = (ParamMap(lr.maxIter -> 20)
 |   .put(lr.maxIter, 30)
 |   .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)