我是Scalatra的新手。我一直在试验Spark。我想将Spark与Scalatra Web界面集成。到目前为止,我找到了两个将Scalatra与Spark集成的代码示例。一个是来自Github(下面的链接),并且似乎没有遵循Scalatra的文档中的正常构建配置,因此我无法使用该模型创建新的Scalatra-Spark项目。
https://github.com/ytaras/scalate_spark
我自己尝试集成Simple Spark操作会出现以下错误:
org.eclipse.jetty.server.AbstractConnector: method <init>()V not found
java.lang.NoSuchMethodError: org.eclipse.jetty.server.AbstractConnector: method <init>()V not found
我抛出错误的代码:
import org.apache.spark._
import org.apache.spark.SparkContext._
import scala.math.random
/** Computes an approximation to pi */
object SparkPi {
lazy val sc = new SparkContext("local", "Spark Pi")
def calcPi(slices: Int = 2) {
println("SparkPi.calcPi - sc: " + sc)
val n = 100000 * slices
val count = sc.parallelize(1 to n, slices).map { i =>
val x = random * 2 - 1
val y = random * 2 - 1
if (x * x + y * y < 1) 1 else 0
}.reduce(_ + _)
println("Pi is roughly " + 4.0 * count / n)
}
}
我不确定如何最好地指出我的Scalatra项目结构,这对于任何试图帮助我解决此问题的人来说可能都非常重要。但我根据他们的文档使用正常的Scalatra项目创建。我通过正常的Scalatra Servlet路由调用此SparkPi类:
get("/pi") {
calcPi()
}
答案 0 :(得分:1)
当错误的jetty库被引用为依赖项时会发生这种情况。 Spark 1.1.0支持Jetty版本7。
在build.scala
文件中,jetty-webapp
的依赖关系树可能会将org.eclipse.jetty:jetty-servlet
程序集包含为7.6.9.v20130131
以外的版本。 Spark 1.1.0依赖于此版本的jetty-servlet
。
此处的解决方案是为jetty-servlet
jetty-webapp
创建一个排除项,但这可能会导致应用程序中的其他问题。
答案 1 :(得分:0)
我遇到了与Spark 1.2.1和Scalatra 2.3.0相同的错误。我最终让Scalatra和Spark一起工作,我必须做以下事情:
......它有效!哇噢!
这是GitHub上的完整工作项目,它使用Scalatra定义了一个调用Spark代码的JSON REST API: