클래스에 중첩 된 메서드를 사용하여 "직렬화 할 수없는 작업"방지

Borck

클로저 범위를 벗어난 필드 또는 메서드에 액세스 할 때 발생하는 일반적인 "작업 직렬화 불가능"문제를 이해합니다.

이를 수정하기 위해 일반적으로 이러한 필드 / 메서드의 로컬 복사본을 정의하여 전체 클래스를 직렬화 할 필요가 없습니다.

class MyClass(val myField: Any) { 
  def run() = { 
    val f = sc.textFile("hdfs://xxx.xxx.xxx.xxx/file.csv") 

    val myField = this.myField 
    println(f.map( _ + myField ).count) 
  } 
} 

이제 run 메서드에 중첩 함수를 정의하면 직렬화 할 수 없습니다.

class MyClass() { 
  def run() = { 
    val f = sc.textFile("hdfs://xxx.xxx.xxx.xxx/file.csv") 

    def mapFn(line: String) = line.split(";") 

    val myField = this.myField 
    println(f.map( mapFn( _ ) ).count) 

  } 
} 

"mapFn"이 범위에있을 것이라고 생각했기 때문에 이해가 안 돼요 ... 더 이상하게도 mapFn을 def 대신 val로 정의하면 작동합니다.

class MyClass() { 
  def run() = { 
    val f = sc.textFile("hdfs://xxx.xxx.xxx.xxx/file.csv") 

    val mapFn = (line: String) => line.split(";") 

    println(f.map( mapFn( _ ) ).count)     
  } 
} 

이것은 Scala가 중첩 함수를 나타내는 방식과 관련이 있습니까?

이 문제를 처리하는 데 권장되는 방법은 무엇입니까? 중첩 된 함수를 피합니까?

Jacek L.

첫 번째 경우 f.map(mapFN(_))에는 동일 f.map(new Function() { override def apply(...) = mapFN(...) })하고 두 번째 경우에는 그냥 작동하도록 작동하지 f.map(mapFN)않습니까? def그것 으로 메서드를 선언 할 때 아마도 주변 클래스에 대한 암시 적 $outer참조가있는 익명 클래스의 메서드 일 것입니다 . 그러나 map을 필요로 Function컴파일러는 그것을 포장 할 필요가 있도록. 래퍼에서 해당 익명 클래스의 일부 메서드를 참조하지만 인스턴스 자체는 참조하지 않습니다. 를 사용하는 경우 val.NET에 전달하는 함수에 대한 직접 참조가 있습니다 map. 나는 이것에 대해 잘 모르겠다, 단지 큰 소리로 생각한다 ...

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

스칼라에서 직렬화 할 수없는 작업

분류에서Dev

데이터 집합을 빨간색으로 변환 할 때 직렬화 할 수없는 작업 예외

분류에서Dev

중첩 된 클래스에서 메소드를 참조하는

분류에서Dev

LINQ를 사용하여 클래스 내에서 중첩 된 사전을 평면화하는 방법

분류에서Dev

LINQ를 사용하여 클래스 내에서 중첩 된 사전을 평면화하는 방법

분류에서Dev

VANILLA JS를 사용하여 중첩 된 Dom 요소에 클래스를 추가하는 방법

분류에서Dev

중첩 된 작업 / 콜백을 사용하여 메서드를 단위 테스트하는 방법

분류에서Dev

Xposed : xposed 프레임 워크에서 중첩 된 클래스 (내부 클래스)의 메서드를 후크하는 방법.

분류에서Dev

ReactJS를 사용하여 ES6 클래스에 중첩 된 "this"바인딩

분류에서Dev

YamlDotNEt 및 C #의 사용자 지정 형식 클래스를 사용하여 중첩 된 YAML 역 직렬화

분류에서Dev

클래스 내에서 중첩 된 개체 함수를 분리하는 방법

분류에서Dev

기본 클래스의 메서드를 사용하여 중첩 클래스에서 제네릭 형식을 반환하는 방법

분류에서Dev

dig 메서드를 사용하여 중첩 된 속성을 얻는 방법

분류에서Dev

중첩 된 클래스 내에서 "상위 클래스"메서드에 액세스하는 좋은 방법은 무엇입니까?

분류에서Dev

중첩 된 클래스 내에서 "상위 클래스"메서드에 액세스하는 좋은 방법은 무엇입니까?

분류에서Dev

중첩 된 내부 클래스 : 상위 메서드에 액세스하고 중첩 된 클래스 유형의 변수를 노출합니다.

분류에서Dev

템플릿 클래스가 중첩 된 템플릿 클래스에서 상속하는 방법

분류에서Dev

자바 스크립트에서 여러 개의 중첩 된 클래스를 선택하는 방법

분류에서Dev

중첩 된 Scala 클래스 정의에서 'this'사용

분류에서Dev

점 표기법을 사용하여 중첩 된 맵에서 중첩 된 항목을 제거하는 방법

분류에서Dev

클래스 이름과 동일한 메서드 이름이있을 때 중첩 된 클래스를 인스턴스화하는 방법은 무엇입니까?

분류에서Dev

Java의 파생 클래스에서 수퍼 클래스에 중첩 된 개인 내부 클래스에 액세스하는 방법이 있습니까?

분류에서Dev

Android에서 중첩 된 동적 Json Object Pojo 클래스를 만드는 방법

분류에서Dev

클래스 내에서 정방향 선언 (중첩 된 클래스 아님)

분류에서Dev

SASS / SCSS를 사용하여 중첩 된 구조 내에서 .js 클래스 변경

분류에서Dev

중첩 된 클래스 이름을 사용하는 방법?

분류에서Dev

중첩 된 클래스 이름을 사용하는 방법?

분류에서Dev

Django REST Framework에서 multipart / form-data를 사용하여 여러 이미지 및 중첩 된 json 업로드

분류에서Dev

React Hooks를 사용하여 여러 페이지에 중첩 된 경로를 표시하는 방법 ..?

Related 관련 기사

  1. 1

    스칼라에서 직렬화 할 수없는 작업

  2. 2

    데이터 집합을 빨간색으로 변환 할 때 직렬화 할 수없는 작업 예외

  3. 3

    중첩 된 클래스에서 메소드를 참조하는

  4. 4

    LINQ를 사용하여 클래스 내에서 중첩 된 사전을 평면화하는 방법

  5. 5

    LINQ를 사용하여 클래스 내에서 중첩 된 사전을 평면화하는 방법

  6. 6

    VANILLA JS를 사용하여 중첩 된 Dom 요소에 클래스를 추가하는 방법

  7. 7

    중첩 된 작업 / 콜백을 사용하여 메서드를 단위 테스트하는 방법

  8. 8

    Xposed : xposed 프레임 워크에서 중첩 된 클래스 (내부 클래스)의 메서드를 후크하는 방법.

  9. 9

    ReactJS를 사용하여 ES6 클래스에 중첩 된 "this"바인딩

  10. 10

    YamlDotNEt 및 C #의 사용자 지정 형식 클래스를 사용하여 중첩 된 YAML 역 직렬화

  11. 11

    클래스 내에서 중첩 된 개체 함수를 분리하는 방법

  12. 12

    기본 클래스의 메서드를 사용하여 중첩 클래스에서 제네릭 형식을 반환하는 방법

  13. 13

    dig 메서드를 사용하여 중첩 된 속성을 얻는 방법

  14. 14

    중첩 된 클래스 내에서 "상위 클래스"메서드에 액세스하는 좋은 방법은 무엇입니까?

  15. 15

    중첩 된 클래스 내에서 "상위 클래스"메서드에 액세스하는 좋은 방법은 무엇입니까?

  16. 16

    중첩 된 내부 클래스 : 상위 메서드에 액세스하고 중첩 된 클래스 유형의 변수를 노출합니다.

  17. 17

    템플릿 클래스가 중첩 된 템플릿 클래스에서 상속하는 방법

  18. 18

    자바 스크립트에서 여러 개의 중첩 된 클래스를 선택하는 방법

  19. 19

    중첩 된 Scala 클래스 정의에서 'this'사용

  20. 20

    점 표기법을 사용하여 중첩 된 맵에서 중첩 된 항목을 제거하는 방법

  21. 21

    클래스 이름과 동일한 메서드 이름이있을 때 중첩 된 클래스를 인스턴스화하는 방법은 무엇입니까?

  22. 22

    Java의 파생 클래스에서 수퍼 클래스에 중첩 된 개인 내부 클래스에 액세스하는 방법이 있습니까?

  23. 23

    Android에서 중첩 된 동적 Json Object Pojo 클래스를 만드는 방법

  24. 24

    클래스 내에서 정방향 선언 (중첩 된 클래스 아님)

  25. 25

    SASS / SCSS를 사용하여 중첩 된 구조 내에서 .js 클래스 변경

  26. 26

    중첩 된 클래스 이름을 사용하는 방법?

  27. 27

    중첩 된 클래스 이름을 사용하는 방법?

  28. 28

    Django REST Framework에서 multipart / form-data를 사용하여 여러 이미지 및 중첩 된 json 업로드

  29. 29

    React Hooks를 사용하여 여러 페이지에 중첩 된 경로를 표시하는 방법 ..?

뜨겁다태그

보관