2015-06-25 20 views
19

gì gây ra lỗi serialization này trong Apache Spark 1.4.0 khi gọi:Spark Song song? (Không thể tìm thấy bất động sản tác giả với tên 'id')

sc.parallelize(strList, 4) 

ngoại lệ này được ném:

com.fasterxml.jackson.databind.JsonMappingException: 
Could not find creator property with name 'id' (in class org.apache.spark.rdd.RDDOperationScope) 

ném từ addBeanProps trong Jackson: com.fasterxml.jackson.databind.deser.BeanDeserializerFactory # addBeanProps

RDD là Seq [String] và #partitions dường như không quan trọng (đã thử 1, 2, 4).

Không có theo dõi ngăn xếp tuần tự hóa, vì thông thường, không thể đăng ký đóng cửa công nhân.

Cách khác để theo dõi điều này là gì?

+2

Bạn có thể thêm một tập con của strList không? –

+0

@ LokeshA.R. Câu hỏi hay - không, cùng lỗi, ngay khi song song được gọi, thậm chí được mã hóa đơn giản như 'sc.parallelize (Seq (" một "," hai "," ba "), 1)' –

Trả lời

41

@Interfector là chính xác. Tôi cũng gặp vấn đề này, đây là một đoạn trích từ tệp sbt của tôi và phần 'dependencyOverrides' đã sửa nó.

libraryDependencies ++= Seq(
    "com.amazonaws" % "amazon-kinesis-client" % "1.4.0", 
    "org.apache.spark" %% "spark-core" % "1.4.0", 
    "org.apache.spark" %% "spark-streaming" % "1.4.0", 
    "org.apache.spark" %% "spark-streaming-kinesis-asl" % "1.4.0", 
    "com.amazonaws" % "aws-java-sdk" % "1.10.2" 
) 

dependencyOverrides ++= Set(
    "com.fasterxml.jackson.core" % "jackson-databind" % "2.4.4" 
) 
+1

Đề xuất tuyệt vời. dependencyOverride đã giúp bằng cách tiết lộ NotSerializableException thích hợp, nhưng sử dụng phiên bản databind "2.4.0", và chỉ sau khi xóa một số bản sao được lưu trong bộ nhớ cache trong thư mục xây dựng. –

+0

Bằng cách này bạn đang hardcoding phiên bản jackson, tôi tin rằng nó là tốt hơn nếu bạn chỉ loại trừ jackson rõ ràng từ AWS SDK. Bằng cách đó, khi bạn nâng cấp, bạn sẽ không phải suy nghĩ về jackson. Trường hợp xấu nhất bạn sẽ chỉ phải loại bỏ loại trừ nếu nó không còn là vấn đề nữa. – Interfector

+0

Dường như vấn đề không được khắc phục trong spark 1.6.0, nó sẽ giải quyết 'com.fasterxml.jackson.module # jackson-module-scala_2.11; 2.4.4' – code4j

10

Tôi cho rằng điều này là do đường dẫn lớp cung cấp cho bạn phiên bản jackson khác với mức Spark mong đợi (nghĩa là 2.4.4 nếu tôi không nhầm lẫn). Bạn sẽ cần phải điều chỉnh classpath của bạn để đúng jackson được tham chiếu đầu tiên cho Spark.

+0

Đề xuất tuyệt vời. Bạn có thể xây dựng thêm về điều đó không? Nếu spark 1.4.0 được tải xuống từ ivy, không phải uber-jar đó có chứa phiên bản thích hợp của jackson-databind không? –

+1

Spark có thể chứa phiên bản jackson phù hợp, nhưng tùy thuộc vào mức độ ưu tiên trong classpath, nó có thể không phải là phiên bản đầu tiên mà ClassLoader chọn lên. Một cách bạn có thể làm là sử dụng tia lửa gửi và đặt bình uber của bạn ở cuối đường dẫn lớp. Bằng cách đó jackson của Spark sẽ được nạp đầu tiên. Vấn đề là đó là lý thuyết, nó có thể gây ra vấn đề cho AWS SDK, vì nó cũng sẽ sử dụng phiên bản cũ hơn, có thể có vấn đề, đặc biệt nếu không có khả năng tương thích nhị phân. – Interfector

+0

Đề xuất tuyệt vời của Interfector. Tôi đã có cùng một vấn đề khi sử dụng tia lửa 1.6. jackson-databind 2.4.4 mvn phụ thuộc hoàn toàn giải quyết vấn đề. – Dilan

1

tôi đã cùng một vấn đề với một dự án được xây dựng với Gradle và tôi loại trừ sự phụ thuộc bắc cầu từ các dự án mà đã tạo ra vấn đề:

dependencies 
{ 
    compile('dependency.causing:problem:version') 
    { 
     exclude module: 'jackson-databind' 
    } 

.... 

} 

đó đã làm việc một cách hoàn hảo đối với tôi.

0

Điều này làm việc cho tôi <dependency> excludeAll ExclusionRule(organization = "com.fasterxml.jackson.core")

Các vấn đề liên quan