2016-11-02 28 views
7

sbt package chạy tốt, nhưng sau khi spark-submit tôi nhận được lỗi:Apache Spark: java.lang.NoSuchMethodError .rddToPairRDDFunctions

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.spark.SparkContext$.rddToPairRDDFunctions(Lorg/apache/spark/rdd/RDD;Lscala/reflect/ClassTag;Lscala/reflect/ClassTag;Lscala/math/Ordering;)Lorg/apache/spark/rdd/PairRDDFunctions; at SmokeStack$.main(SmokeStack.scala:46) at SmokeStack.main(SmokeStack.scala) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:736) at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:185) at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:210) at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:124) at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

Đây là dòng vi phạm:

val sigCounts = rowData.map(row => (row("Signature"), 1)).countByKey() 

rowData là một RDD Bản đồ [String, String]. Khóa "Chữ ký" tồn tại trong tất cả các mục trong bản đồ.

Tôi nghi ngờ đây có thể là sự cố xây dựng. Bên dưới là tệp sbt của tôi:

name := "Example1" 
version := "0.1" 
scalaVersion := "2.11.8" 

libraryDependencies += "org.apache.spark" %% "spark-core" % "1.2.0" 
scalacOptions ++= Seq("-feature") 

Tôi mới làm quen với Scala vì vậy có thể nhập không chính xác? Tôi có:

import org.apache.spark.SparkContext 
import org.apache.spark.SparkContext._ 
import scala.io.Source 
+1

biên dịch và thời gian chạy của bạn phiên bản của tia lửa không khớp. – maasg

+0

Đó là phiên bản Spark khá cũ. Hãy thử sử dụng một chút mới hơn. Và như đã đề cập ở trên - thời gian chạy và biên dịch các phiên bản tia lửa của bạn không khớp. – JiriS

+0

@maasg Tôi đã thay đổi các phiên bản Spark biên dịch và thời gian chạy để khớp và mọi thứ hoạt động. Bạn có thể đặt câu trả lời này làm câu trả lời để tôi có thể chấp nhận nó không? – BlackSheep

Trả lời

10

java.lang.NoSuchMethodError thường là một dấu hiệu cho thấy phiên bản mã đã được biên dịch chống lại là trên một phiên bản cao hơn các thư viện sử dụng khi chạy.

Với Spark, điều đó có nghĩa là phiên bản Spark được sử dụng để biên dịch khác với phiên bản được triển khai (trên máy hoặc cụm).

Căn chỉnh các phiên bản giữa phát triển và thời gian chạy nên giải quyết vấn đề này.

0

Tôi đã đối mặt với cùng một vấn đề trong khi đọc một tệp json trực tuyến đơn giản vào một khung dữ liệu và hiển thị nó bằng cách sử dụng phương thức .show(). Tôi sẽ gặp lỗi này trên dòng mã myDF.show().

Đối với tôi, hóa ra là phiên bản sai của thư viện spark-sql trong bản dựng.

tức là tôi đã có trong Thư viện bên ngoài của mình từ SBT thay vì.

Thêm dòng sau vào build.sbt tôi giải quyết vấn đề

libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.2.0" 
Các vấn đề liên quan