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