2016-06-01 2 views
2

spark에서 Kyro와 비즈니스 로직 및 모델 클래스가있는 클래스를 등록합니다.Spark - Kyro로 모델 객체를 등록하십시오 : java.lang.IllegalArgumentException : 클래스가 등록되지 않았습니다 :

public class KyroSerializer implements KryoRegistrator { 

     @Override 
     public void registerClasses(Kryo kryo) { 
      kryo.register(People.class); 
      kryo.register(Lookup.class); 

     } 
    } 

모델 클래스 :

class people implements Serializable{ 
     private static final long serialVersionUID = 1L; ...... } 

    public class Lookup implements Serializable{ 
     private static final long serialVersionUID = 1L; 

     private String code1; 
     private String code2; 

} 

마지막으로 내 스파크 컨텍스트 :

sc.set ("스파크 나는 아래의 예외를

> Job aborted due to stage failure: Task 14 in stage 1.0 failed 4 times, 
> most recent failure: Lost task 14.3 in stage 1.0 (TID 90, **): 
> java.lang.IllegalArgumentException: Class is not registered: Object[] 
> Note: To register this class use: kryo.register(Object[].class); at 
> com.esotericsoftware.kryo.Kryo.getRegistration(Kryo.java:442)  at 
> com.esotericsoftware.kryo.util.DefaultClassResolver.writeClass(DefaultClassResolver.java:79) 
> at com.esotericsoftware.kryo.Kryo.writeClass(Kryo.java:472)  at 
> com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:565)  at 
> org.apache.spark.serializer.KryoSerializerInstance.serialize(KryoSerializer.scala:296) 
> at 
> org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:239) 
> at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
> at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
> at java.lang.Thread.run(Thread.java:745) 
> 
> Driver stacktrace: 

KYRO Registrtor를 얻을. kryo.registrator ", KyroSerializer.class.getName())

답변

0

kryo가 Object[] (입력 항목이 Object 인 배열) 클래스 개체를 등록하지 않은 것으로 보입니다. 다음과 같이 코드를 변경 시도하십시오 : 당신을 위해 작동하는 경우

public class KyroSerializer implements KryoRegistrator { 

    @Override 
    public void registerClasses(Kryo kryo) { 
     kryo.register(Object[].class);  // add this line to your class 
     kryo.register(People.class); 
     kryo.register(Lookup.class); 
    } 
} 

또한, 그래도 난 후, 내 마지막을 무시,이

sc.set("spark.kryo.registrator", KyroSerializer.class.getCanonicalName()); 

처럼 불꽃과 사용자 정의 registrator 클래스를 등록 할 것 말.

관련 문제