2016-07-09 4 views
1

아래 텍스트를 의미 함수를 전달하는 기능를 포함하는 객체 직렬화 실수 때 조심 Learning Spark함수를 포함하는 객체 직렬화 -

한 문제의 제 3 장에서입니다. 객체의 구성원 인 함수를 전달하거나 객체의 필드 (예 : self.field)에 필드에 대한 참조를 포함하면 Spark는 전체 객체 을 작업자 노드로 보냅니다. 이는 비트보다 훨씬 클 수 있습니다. 정보 이 필요합니다 (예 3-19 참조). Python이 피클하는 방법을 알아낼 수없는 개체가 클래스에 포함되어있는 경우 가끔 이로 인해 프로그램이 실패 할 수도 있습니다. enter image description here

은 저자가 여기에 전달하기 위해 노력하고 어떤 메시지를 설명해주십시오.

+0

솔직히 저자는 변수가 파이썬에서 어떻게 작동하는지 이해하지 못하기 때문에 잘못되었다고 생각합니다. 아마도 안전한 예에서'query'는'self.query'의 다른 이름 일 뿐이므로 결과는 같습니다. – martineau

답변

1

분산 시스템의 작업자에게는 공유 메모리가 없으므로 각 작업자는 코드를 실행하는 데 필요한 모든 기능, 데이터 등의 복사본을 가져야합니다. 따라서 배포 할 호출을 할 때 작업자가 실제로 필요하지 않은 물건을 복사하지 않도록함으로써이 오버 헤드를 줄여야합니다.

이 예에서 rdd.filter은 여러 작업자에게 배포 할 수있는 벡터화 된 (기능적) 작업입니다. 그것은 하나의 인수, 즉 함수를 취합니다. 작성자는 그 함수가 어떤 객체의 필드 (속성)를 참조하면 (내부 객체 객체는 자체 객체이므로 self은 자신을 참조하는 데 사용되므로 기본적으로 자체 메서드 내에서 filter 메서드를 호출 할 객체를 참조 함) 전체 객체 (인스턴스)는 간단한 함수가 아닌 작업자에게 복사됩니다. 그리고 객체는 많은 데이터를 참조하는 많은 속성을 포함 할 수 있습니다.