Scala 中如何解析导入的名称? (火花/齐柏林飞艇)

Posted

技术标签:

【中文标题】Scala 中如何解析导入的名称? (火花/齐柏林飞艇)【英文标题】:How is an imported name resolved in Scala? (Spark / Zeppelin) 【发布时间】: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 时遇到了这个问题 【参考方案1】:

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

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

【讨论】:

以上是关于Scala 中如何解析导入的名称? (火花/齐柏林飞艇)的主要内容,如果未能解决你的问题,请参考以下文章

齐柏林飞艇 |广告组 |角色

齐柏林飞艇超越超集

WSL 上的齐柏林飞艇。 java.io.IOException:无法启动解释器进程

Scala 和 Spark UDF 函数

如何将火花行(StructType)投射到scala案例类

如何在火花聚合函数中实现scala类型安全