RDD 키로 요소 제거

McBoman

다음 코드로 가져온 2 개의 RDD가 있습니다.

val fileA = sc.textFile("fileA.txt")
val fileB = sc.textFile("fileB.txt")

그런 다음 키로 매핑하고 축소합니다.

val countsB = fileB.flatMap(line => line.split("\n"))
  .map(word => (word, 1))
  .reduceByKey(_+_)

val countsA = fileA.flatMap(line => line.split("\n"))
  .map(word => (word, 1))
  .reduceByKey(_+_)

이제 키가 countA에 존재하는 경우 countB의 모든 키를 찾아 제거하고 싶지 않습니다.

나는 다음과 같은 것을 시도했다.

countsB.keys.foreach(b => {
  if(countsB.collect().exists(_ == b)){
    countsB.collect().drop(countsB.collect().indexOf(b))
  }
})

그러나 그것은 열쇠로 그들을 제거하는 것처럼 보이지 않습니다.

차크 조 하르

제안 된 코드에는 3 가지 문제가 있습니다.

  1. 당신은하는 collect데이터 집합이 큰 경우에 당신을 잃게 스파크의 병렬 처리 및 위험에서 OutOfMemory 오류 때문에, 그들은 더 이상, 그들은 일반 스칼라 컬렉션으로 드라이버 응용 프로그램의 메모리에 복사됩니다 RDDs하지 않은 수단 RDDs을 보내고

  2. drop변경 불가능한 Scala 컬렉션 (또는 RDD)을 호출 할 때 원본 컬렉션을 변경하지 않고 해당 레코드가 삭제 컬렉션 을 가져 오므로 원본 컬렉션이 변경 될 것으로 기대할 수 없습니다.

  3. RDDRDD의 상위 메서드 (예 : foreach이 경우)에 전달 된 함수 내에서 액세스 할 수 없습니다. 이 메서드에 전달 된 모든 함수는 직렬화되어 작업자에게 전송되며 RDDs는 (의도적으로) 직렬화 할 수 없습니다. 드라이버 메모리로 가져 와서 직렬화 한 다음 작업자에게 다시 보내기 위해 데이터가 이미 작업자에 배포되어 있습니다!

이 모든 문제를 해결하려면 한 RDD의 데이터를 사용하여 다른 RDD를 변환 / 필터링하려는 경우 일반적으로 join. 이 경우 다음을 수행 할 수 있습니다.

// left join, and keep only records for which there was NO match in countsA:
countsB.leftOuterJoin(countsA).collect { case (key, (valueB, None)) => (key, valueB) }

참고이 collect내가 여기에 사용하고하는 것은 아니라는 것을 collect당신이 사용 -이 일이 소요 PartialFunction인수로, 그리고 동작합니다의 조합과 같이 map하고 filter, 그리고 가장 중요한 :이 드라이버 메모리에 모든 데이터를 복사하지 않습니다.

편집 : Archetypal Paul이 언급했듯이-훨씬 더 짧고 더 좋은 옵션이 있습니다- subtractByKey:

countsB.subtractByKey(countsA)

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Spark RDD에서 요소 제거

분류에서Dev

RDD에서 빈 키 제거

분류에서Dev

etree로 요소 제거

분류에서Dev

XPath로 요소 제거

분류에서Dev

반복하는 동안 키로 사전에서 요소 제거

분류에서Dev

XSLT로 EMPTY 데이터 요소 제거

분류에서Dev

preg_replace로 요소 제거

분류에서Dev

PHP로 부모 DOM 요소 제거

분류에서Dev

HtmlUnit으로 요소 추가 및 제거

분류에서Dev

jquery로 빈 요소 반복 및 제거

분류에서Dev

동일한 RDD에서 키가 지정된 RDD에 임의의 요소 추가

분류에서Dev

XML XSL 제거 / 구조를 필요한 요소로 축소

분류에서Dev

요소 속성별로 bash 배열에서 요소 제거

분류에서Dev

여러 요소의 click ()을 기반으로 jQuery 쿠키 설정 및 제거

분류에서Dev

마지막 요소로 div에 열 (입력 요소) 추가 (복제) 및 제거

분류에서Dev

JSoup, 요소 제거

분류에서Dev

Gradle 제품 버전으로 AndroidManifest 요소 제거

분류에서Dev

Python MiniDom이 요소를 제대로 제거하지 않음

분류에서Dev

중복 키 요소가있는 목록에서 튜플 제거

분류에서Dev

'this'키워드를 사용하여 벡터에서 요소 제거

분류에서Dev

다른 열의 요소를 기반으로 pyspark 배열에서 요소 제거

분류에서Dev

JQuery로 요소를 추가하면 이전 요소가 제거됨

분류에서Dev

다른 요소의 콘텐츠를 기반으로 요소 제거

분류에서Dev

프로그래밍 방식으로 html 요소 제거

분류에서Dev

Spring Boot Native Cache : 개별 키 / 요소별로 캐시 데이터를 만료 / 제거하는 방법

분류에서Dev

데이터의 요소를 제거해도 VueJS의 키가 새로 고쳐지지 않습니다.

분류에서Dev

여러 키의 중복 값을 기반으로 객체 배열에서 요소 제거

분류에서Dev

텍스트 값 검색 키로 자식 li 요소를 제거하는 방법은 무엇입니까?

분류에서Dev

유효한 SSH 키로 저장소 제거

Related 관련 기사

  1. 1

    Spark RDD에서 요소 제거

  2. 2

    RDD에서 빈 키 제거

  3. 3

    etree로 요소 제거

  4. 4

    XPath로 요소 제거

  5. 5

    반복하는 동안 키로 사전에서 요소 제거

  6. 6

    XSLT로 EMPTY 데이터 요소 제거

  7. 7

    preg_replace로 요소 제거

  8. 8

    PHP로 부모 DOM 요소 제거

  9. 9

    HtmlUnit으로 요소 추가 및 제거

  10. 10

    jquery로 빈 요소 반복 및 제거

  11. 11

    동일한 RDD에서 키가 지정된 RDD에 임의의 요소 추가

  12. 12

    XML XSL 제거 / 구조를 필요한 요소로 축소

  13. 13

    요소 속성별로 bash 배열에서 요소 제거

  14. 14

    여러 요소의 click ()을 기반으로 jQuery 쿠키 설정 및 제거

  15. 15

    마지막 요소로 div에 열 (입력 요소) 추가 (복제) 및 제거

  16. 16

    JSoup, 요소 제거

  17. 17

    Gradle 제품 버전으로 AndroidManifest 요소 제거

  18. 18

    Python MiniDom이 요소를 제대로 제거하지 않음

  19. 19

    중복 키 요소가있는 목록에서 튜플 제거

  20. 20

    'this'키워드를 사용하여 벡터에서 요소 제거

  21. 21

    다른 열의 요소를 기반으로 pyspark 배열에서 요소 제거

  22. 22

    JQuery로 요소를 추가하면 이전 요소가 제거됨

  23. 23

    다른 요소의 콘텐츠를 기반으로 요소 제거

  24. 24

    프로그래밍 방식으로 html 요소 제거

  25. 25

    Spring Boot Native Cache : 개별 키 / 요소별로 캐시 데이터를 만료 / 제거하는 방법

  26. 26

    데이터의 요소를 제거해도 VueJS의 키가 새로 고쳐지지 않습니다.

  27. 27

    여러 키의 중복 값을 기반으로 객체 배열에서 요소 제거

  28. 28

    텍스트 값 검색 키로 자식 li 요소를 제거하는 방법은 무엇입니까?

  29. 29

    유효한 SSH 키로 저장소 제거

뜨겁다태그

보관