带有 Spark 解释器的 Zeppelin 忽略在 class/function 定义之外声明的导入

Zeppelin with Spark interpreter ignores imports declared outside of class/function definition

我正在尝试在 Zeppelin 0.8.0 中使用一些 Scala 代码和 Spark 解释器:

%spark
import scala.beans.BeanProperty

class Node(@BeanProperty val parent: Option[Node]) {
}

但是似乎没有考虑进口

import scala.beans.BeanProperty
<console>:14: error: not found: type BeanProperty
                  @BeanProperty val parent: Option[Node]) {
                   ^

编辑: 我发现以下代码有效:

class Node(@scala.beans.BeanProperty val parent: Option[Node]) {
}

这也很好用:

def loadCsv(CSVPATH: String): DataFrame = {
    import org.apache.spark.sql.types._
    //[...] some code
    val schema = StructType(
        firstRow.map(s => StructField(s, StringType))
    )
    //[…] some code again
}

所以我想如果它在大括号之间导入或者在使用时直接用 path.to.package.Class 指定,我想一切正常。

问题: 如何在 class/function 定义之外导入?

通过 path.to.package.Class 导入在 Zeppelin 中运行良好。您可以尝试导入和使用 java.sql.Date;

import java.sql.Date
val date = Date.valueOf("2019-01-01")

问题是关于 Zeppelin 上下文。如果您尝试在 Zeppelin 中使用以下代码片段,您会发现它工作正常;

object TestImport {
     import scala.beans.BeanProperty
     class Node(@BeanProperty val parent: Option[Node]){}
}
val testObj = new TestImport.Node(None)
testObj.getParent
//prints Option[Node] = None

希望对您有所帮助!