내 스파크 작업 중 하나에 오류가 아래 얻고 있었다 -스파크 - 작업하지 직렬화 : java.io.NotSerializableException : java.lang.reflect.Field의
작업하지 직렬화 : java.io.NotSerializableException : java.lang.reflect.Field의
은 내가 메모리에서 java.lang.reflect.Field의 배열을 유지하는 사용 된 폐쇄 중 하나의 클래스를 한 것을 깨달았다. java.lang.reflect.Field는 java.io.Serializable을 구현하지 않으므로 Spark에서 직렬화 할 수 없으므로 오류가 발생합니다. 이 오류를 어떻게 해결할 수 있습니까? Field를 사용할 수 없습니다.
- 각 실행 프로그램에서 클래스의 새 인스턴스를 작성하여 직렬화되지 않도록하십시오. 나는 https://www.nicolaferraro.me/2016/02/22/using-non-serializable-objects-in-apache-spark/을 사용했는데 하나의 객체 유형에서는 작동하지만 2에서는 작동하지 않는 것처럼 보였다.
- Field를 사용하는 클래스에 Kryo 시리얼 라이저를 사용하십시오. Kryo는 java.io.Serializable을 구현하지 않는 클래스에서 작동합니까?
- 방송 변수 사용 - 확실하지 않습니다. 브로드 캐스트 변수는 직렬화 가능해야합니까?
개체가 실제로 어떤 이유로 든 직렬화 될 수없는 경우이 NotSerializableException을 해결하는 다른 방법은 무엇입니까?
코드를 제공 할 수 있습니까? –
왜 처음부터 필드를 직렬화 하시겠습니까? 수신단에서 재구성 할 수 있습니다. – EJP
@EJP 그게 문제를 해결하기위한 것이지만, 코드를 리팩터링하고 디자인을 변경하여 클래스에서 Field를 제거해야했습니다. 나는 진정으로 무언가가 직렬화되지 않고 코드에서 제거 될 수 없을 때 문제를 해결할 다른 방법이 있는지 알아 내고 싶었다. –