在spark-shell中加载了JAR,但无法引用代码

时间:2016-02-01 19:59:50

标签: scala jar apache-spark

我正在使用Spark学习高级分析。

这里发生了什么:我按照spark-shell上的教程,我把相当长的代码放入其中。当我关闭笔记本电脑的盖子时,这会让我的笔记本电脑进入睡眠模式,当我重新打开它时,代码就消失了。

作为一种解决方案,正如本书中所建议的那样,我正在尝试将我的代码放在.scala文件中,并在每次重新启动JAR时使用spark-shell进行编译和加载。这本书甚至提供了一个简单的例子来做到这一点。 https://github.com/sryza/aas/tree/master/simplesparkproject

所以我git clone编辑了该项目,运行mvn package,并spark-shellspark-shell --jars target/simplesparkproject-0.0.1.jar --master local一起运行,就像在方向上一样。

如果您看到此示例的git repo,则代码中包含一个对象MyApp,其中包含两个函数。

object MyApp {
  def main(args: Array[String]) {
    val sc = new SparkContext(new SparkConf().setAppName("My App"))
    println("num lines: " + countLines(sc, args(0)))
  }

  def countLines(sc: SparkContext, path: String): Long = {
    sc.textFile(path).count()
  }
}

根据我的理解,这个类和函数应该能够在spark-shell中引用,因为它是为--jars选项指定的。

但是,当我在MyApp上输入spark-shell时,

scala> MyApp
<console>:23: error: not found: value MyApp
       MyApp
       ^

我做错了什么,我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

只需导入对象并调用所需的方法:

import com.cloudera.datascience.MyApp
MyApp.main()