【发布时间】:2018-09-24 06:58:41
【问题描述】:
我想为我的代码构建一个“胖”罐子。我主要了解如何执行此操作,但我所使用的所有示例都使用 jar 不是本地的想法,并且我不确定如何将我构建的 scala 代码使用的另一个 JAR 包含到我组装的 jar 中。就像我必须包含的这个 JAR 驻留在哪个文件夹中一样?
通常,当我使用 spark-shell 运行当前代码作为测试时,它看起来像这样:
spark-shell --jars magellan_2.11-1.0.6-SNAPSHOT.jar -i st_magellan_abby2.scala
(jar文件与.scala文件在同一路径)
所以现在我想构建一个 build.sbt 文件,它执行相同的操作并包含该 SNAPSHOT.jar 文件?
name := "PSGApp"
version := "1.0"
scalaVersion := "2.11.8"
resolvers += "Spark Packages Repo" at "http://dl.bintray.com/spark-packages/maven"
//provided means don't included it is there. already on cluster?
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "2.2.0" % "provided",
"org.apache.spark" %% "spark-sql" % "2.2.0" % "provided",
"org.apache.spark" %% "spark-streaming" % "2.2.0" % "provided",
//add magellan here somehow?
)
那么我应该将 jar 放在 SBT 项目文件夹结构中的什么位置,以便在我运行 sbt 程序集时获取它?是在主/资源文件夹中吗?参考手册说“要包含在主 jar 中的文件”在哪里?
我会在 libraryDependencies 中放什么,以便它知道添加特定的 jar 而不是上网获取它?
最后一件事,我还在我的测试代码中进行了一些导入,现在我将此代码放在一个附加了def main 的对象中。
我有这样的事情:
import sqlContext.implicits._ 就在上面的代码中,它将像这样使用:
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext.implicits._
import org.apache.spark.sql.functions.udf
val distance =udf {(a: Point, b: Point) =>
a.withinCircle(b, .001f); //current radius set to .0001
}
我不确定我是否可以将这些导入保留在 def main 中?还是我必须以某种方式将它们移到其他地方? (我猜还在学习 scala 和争论范围)。
【问题讨论】:
标签: scala apache-spark sbt