Я получаю аналогичную ошибку с той, с которой столкнулся here - Я могу запустить GraphX, используя искровую оболочку, но я получаю NoSuchMethodError, когда пытаюсь использовать spark-submit на jar файл. Это линия, что она жалуется:Получение NoSuchMethodError при настройке графика Spark GraphX
val myGraph: Graph[(String, Long, String), Int] = Graph.apply(userRecords, userConnectionEdges)
, который дает мне следующую ошибку:
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.spark.graphx.
Graph$.apply$default$4()Lorg/apache/spark/storage/StorageLevel;
at MyProject$.main(MyProject.scala:53)
at MyProject.main(MyProject.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.apache.spark.deploy.SparkSubmit$.launch(SparkSubmit.scala:292)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:55)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Код сборки с использованием сборки SBT, так что я не то, что происходит не так.
EDIT: Я создал новый проект scala, чтобы взять код от here и встроил его в файл jar. Это файл Scala:
/* GraphTest.scala */
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import org.apache.spark.graphx._
import org.apache.spark.rdd.RDD
object GraphTest {
def main(args: Array[String]) {
// Set up environment
val conf = new SparkConf()
val sc = new SparkContext(conf)
// Set up the vertices
val vertexArray = Array(
(1L, ("Alice", 28)),
(2L, ("Bob", 27)),
(3L, ("Charlie", 65)),
(4L, ("David", 42)),
(5L, ("Ed", 55)),
(6L, ("Fran", 50))
)
// Set up the edges
val edgeArray = Array(
Edge(2L, 1L, 7),
Edge(2L, 4L, 2),
Edge(3L, 2L, 4),
Edge(3L, 6L, 3),
Edge(4L, 1L, 1),
Edge(5L, 2L, 2),
Edge(5L, 3L, 8),
Edge(5L, 6L, 3)
)
// Convert arrays to RDDs
val vertexRDD: RDD[(Long, (String, Int))] = sc.parallelize(vertexArray)
val edgeRDD: RDD[Edge[Int]] = sc.parallelize(edgeArray)
// Create graph and print vertex data
val graph: Graph[(String, Int), Int] = Graph(vertexRDD, edgeRDD)
graph.vertices.filter { case (id, (name, age)) => age > 30 }.collect.foreach {
case (id, (name, age)) => println(s"$name is $age")
}
}
}
Вот настройки сборки:
import AssemblyKeys._
assemblySettings
name := "graphtest"
version := "1.0"
scalaVersion := "2.10.3"
libraryDependencies += "org.apache.spark" % "spark-graphx_2.10" % "1.2.1" % "provided"
Я могу запустить SBT сборку на код, но когда я бегу
..\spark\bin\spark-submit --class GraphTest target\scala-2.10\graphtest-assembly-1.0.jar
Я получаю NoSuchMethodError ,
Возможно, несоответствие версии? –
Я не могу воспроизвести вашу проблему. Я ввел код из предыдущего представления, и он работал нормально. Я также смог создать явно вызывающий Graph, вместо того, чтобы просто «Graph (вершины, ребра)»), без каких-либо ошибок. Единственное различие, которое я вижу, это то, что я начал с импорта импорта org.apache.spark.graphx._ в мой сеанс REPL. Можете ли вы опубликовать полный сеанс REPL, который воспроизводит проблему? –