用sbt正确建造罐子

时间:2016-07-28 00:19:01

标签: scala amazon-web-services amazon-s3 jar sbt

我有一个地图缩小.scala文件,如下所示:

import org.apache.spark._

object WordCount {
  def main(args: Array[String]){
    val inputDir = args(0)
    //val inputDir = "/Users/eksi/Desktop/sherlock.txt"
    val outputDir = args(1)
    //val outputDir = "/Users/eksi/Desktop/out.txt"
    val cnf = new SparkConf().setAppName("Example MapReduce Spark Job")

    val sc = new SparkContext(cnf)

    val textFile = sc.textFile(inputDir)
    val counts = textFile.flatMap(line => line.split(" "))
      .map(word => (word, 1))
      .reduceByKey(_ + _)
    counts.saveAsTextFile(outputDir)
    sc.stop()

  }
}

当我运行我的代码时,使用setMaster("local[1]")参数可以正常工作。

我想将此代码放在.jar中并将其抛给S3以使用AWS EMR。因此,我使用以下build.sbt来执行此操作。

name := "word-count"

version := "0.0.1"

scalaVersion := "2.11.7"

// additional libraries
libraryDependencies ++= Seq(
  "org.apache.spark" % "spark-core_2.10" % "1.0.2"
)

它会生成一个jar文件,但我的scala代码都没有。当我提取.jar

时,我看到的只是一个清单文件

当我运行sbt package时,这就是我得到的:

[myMacBook-Pro] > sbt package
[info] Loading project definition from /Users/lele/bigdata/wordcount/project
[info] Set current project to word-count (in build file:/Users/lele/bigdata/wordcount/)
[info] Packaging /Users/lele/bigdata/wordcount/target/scala-2.11/word-count_2.11-0.0.1.jar ...
[info] Done packaging.
[success] Total time: 0 s, completed Jul 27, 2016 10:33:26 PM

我应该怎么做才能创建一个像

一样的正确jar文件

WordCount.jar WordCount

1 个答案:

答案 0 :(得分:1)

参考:它会生成一个jar文件,但我的scala代码都没有。当我提取.jar

时,我看到的只是一个清单文件

确保您的src/main/scala位于根目录中或(and)

来自http://www.scala-sbt.org/1.0/docs/Directories.html

  

源代码可以像hello / hw.scala一样放在项目的基目录中。但是,大多数人不会为真实项目这样做;太杂乱了。

     

默认情况下,sbt使用与Maven相同的目录结构作为源文件(所有路径都相对于基本目录):