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 覆盖子类中方法返回的类型提示,无需重新定义方法签名