【问题标题】:How is an imported name resolved in Scala? (Spark / Zeppelin)Scala 中如何解析导入的名称? (火花/齐柏林飞艇)
【发布时间】:2019-02-04 03:47:59
【问题描述】:

我在 Zeppelin 中使用 Spark 解释器在段落中运行了一个脚本。它有一个导入,导入的名称可以从全局命名空间和函数中解析,但不能从类中的方法解析。

这在我的计算机安装的 Scala (2.12) 上运行良好,但在 Zeppelin (Scala 2.11) 中不起作用。

import java.util.Calendar

def myFun: String = {
    // this works
    return Calendar.getInstance.toString
}

class MyClass {
    def myFun(): String = {
      // this doesn't
      return Calendar.getInstance.toString

      // this works
      return java.util.Calendar.getInstance.toString
    }
}

错误信息如下:

import java.util.Calendar
myFun: String
<console>:15: error: not found: value Calendar
                 return Calendar.getInstance.toString

我错过了什么?

【问题讨论】:

  • 1.11 ?你确定不是 2.11 吗?
  • 是的,为错字道歉!
  • 如果无法访问 Spark/Zeppelin,我推测这是该系统如何解释 Scala 脚本的错误。 import 语句应该将 java.util.Calendar 带入范围,就像 Calendar 一样; 每个版本的Scala都应该尊重这一点!
  • 您使用哪个版本的 zeppelin?我在 master 分支中没有看到这个问题。
  • @zjffdu 我在运行 0.8.0 时遇到了这个问题

标签: scala apache-spark apache-zeppelin


【解决方案1】:

在 0.8.0 中,Zeppelin 引入了一个新的 SparkInterpreter,我想这是因为全局导入不起作用,并且导入必须在包装器内进行。

作为一种解决方法,可以将属性 zeppelin.spark.useNew 设置为值“false”。这会禁用 sparks 新解释器。

【讨论】:

    猜你喜欢
    • 2017-12-24
    • 2018-08-01
    • 2021-07-14
    • 2016-04-16
    • 2019-01-08
    • 2019-02-08
    • 1970-01-01
    • 2019-05-13
    • 2016-02-16
    相关资源
    最近更新 更多