Spark-shell 不覆盖方法定义

Posted

技术标签:

【中文标题】Spark-shell 不覆盖方法定义【英文标题】:Spark-shell not overriding method definition 【发布时间】:2017-05-11 06:27:37 【问题描述】:

我正在运行 Spark 2 - shell 与 scala 2.11.8 并想知道以下行为,其中每一行都是要在 shell 中执行的代码块:

def myMethod()  = "first definition"

val tmp = myMethod(); val out = tmp

println(out) // prints "first definition"

def myMethod()  = "second definition" // override above myMethod

val tmp = myMethod(); val out = tmp 

println(out) // should be "second definition" but is "first definition"

所以如果我重新定义myMethod,在这种情况下似乎不会更新实现。我发现倒数第二个语句 (val out = tmp) 会导致这种行为,如果将其移动到单独的块中,代码就可以正常工作。

所以我的问题是:这是期望的行为还是错误?

【问题讨论】:

这对我来说似乎是一个错误(特别是因为如果你将 val tmp-myMethod(); val out = tmp 分成两行,它会得到第二个定义)。我建议提交一个错误 @AssafMendelson 我刚刚创建了一个 jiira:issues.apache.org/jira/browse/SPARK-20706 【参考方案1】:

这确实是一个 Spark-Shell 错误(或者更多是 Scala REPL 错误),将在 Spark 2.3 中解决:https://issues.apache.org/jira/browse/SPARK-20706

【讨论】:

以上是关于Spark-shell 不覆盖方法定义的主要内容,如果未能解决你的问题,请参考以下文章

使用spark-shell时,使用sparkConf.set(..)自定义SparkContext

iOS 使用自定义 Xib 和视图覆盖 initWithFrame 的正确方法?

Python 覆盖子类中方法返回的类型提示,无需重新定义方法签名

在实现自定义ValidationAttribute时,我应该覆盖哪种IsValid方法

如何覆盖模块中的类常量和方法?

jqueryValidator自定义校验规则的一种方式(不覆盖源码)