복붙노트

[HADOOP] 딜 꿀꺽 꿀꺽 확장을 직렬화

HADOOP

딜 꿀꺽 꿀꺽 확장을 직렬화

최근에, 나는 "클라우드에서 우리의 C ++ LIB 일을"하도록 요청하고있다. 기본적으로, LIB 집중 컴퓨터 (계산 가격)입니다, 그래서 의미가있다. 나는 MRJob과 맵리 듀스를 사용하는 마음에와 파이썬 버전을 만들 수있는 꿀꺽 꿀꺽 인터페이스를 구축했다. 나는 파일의 개체를 직렬화하고, 매퍼를 사용하여 직렬화 및 가격을 계산하고 싶었다.

예를 들면 :

class MRTest(MRJob):
    def mapper(self,key,value):
        obj = dill.loads(value)
        yield (key, obj.price())

이 딜은 꿀꺽 꿀꺽 확장을 처리 할 수없는 것 때문에하지만 지금은 막 다른 골목에 도달 :

PicklingError: Can't pickle <class 'SwigPyObject'>: it's not found as builtins.SwigPyObject

제대로이 일을 할 수있는 방법이 있습니까?

해결법

  1. ==============================

    1.나는 딜 저자입니다. 맞습니다, 딜 C ++ 객체를 피클 수 없습니다. 당신이이 builtin.some_object로 발견 아니에요 볼 때 ... 거의 변함없이 당신이 파이썬으로 작성되지 않은 일부 개체를 피클하려고하는 것을 의미하지만, C / C ++ (즉, 연장 형)에 바인딩 파이썬을 사용합니다. 직접 파이썬 시리얼 라이저와 같은 객체를 산세의 희망이 없습니다.

    나는 딜 저자입니다. 맞습니다, 딜 C ++ 객체를 피클 수 없습니다. 당신이이 builtin.some_object로 발견 아니에요 볼 때 ... 거의 변함없이 당신이 파이썬으로 작성되지 않은 일부 개체를 피클하려고하는 것을 의미하지만, C / C ++ (즉, 연장 형)에 바인딩 파이썬을 사용합니다. 직접 파이썬 시리얼 라이저와 같은 객체를 산세의 희망이 없습니다.

    당신이 확장 타입의 서브 클래스를 산세에 관심이 있기 때문에, 당신은 실제로 그것을 할 수 있습니다. 당신이해야 할 모든 개체는 인스턴스 속성 또는 속성으로 저장할 적절한 상태를주고, 개체의 상태를 저장하는 방법 딜 (또는 피클)를 알려주는 __reduce__ 방법을 제공하는 것이다. 이 방법은 확장 유형을 직렬화와 파이썬 거래입니다. 보다: https://docs.python.org/2/library/pickle.html#pickling-and-unpickling-extension-types

    이 아마 더 좋은 예입니다 만, 여기에 적어도 하나의 예입니다 : https://stackoverflow.com/a/19874769/4646678

  2. from https://stackoverflow.com/questions/32295313/serialize-swig-extension-with-dill by cc-by-sa and MIT license