n 개의 가능한 요소에서 3 개 값의 가능한 모든 조합을 가져옵니다.

Vektor88

30 개 항목 목록에서 3 개 요소의 가능한 모든 조합 목록을 가져 오려고합니다. 다음 코드를 사용하려고했지만 OutOfMemoryError. 이것보다 더 효율적인 대안이 있습니까?

val items = sqlContext.table(SOURCE_DB + "." + SOURCE_TABLE).
  select("item_id").distinct.cache

val items.take(1) // Compute cache before join

val itemCombinations = items.select($"item_id".alias("id_A")).
  join(
    items.select($"item_id".alias("id_B")), $"id_A".lt($"id_B")).
    join(
      items.select($"item_id".alias("id_C")), $"id_B".lt($"id_C"))
maasg

접근 방식은 괜찮아 보이지만 쿼리 실행 수준에서 상당한 오버 헤드를 생성 할 수 있습니다. n이 상당히 작은 숫자라고 가정하면 Scala 구현을 직접 사용할 수 있습니다.

val localItems = items.collect
val combinations = localItems.combinations(3)

그 결과 iterator상당한 메모리 오버 헤드없이 한 번에 하나의 요소를 사용할 수 있습니다.

Spark 버전 (편집)

Spark 버전을 만들고자한다면 RDD 수준으로 떨어 뜨리면 쿼리 플래너 (문제가 있다고 가정)를 피할 수 있습니다. 이것은 기본적으로 질문의 조인과 동일한 표현입니다.

val items = sqlContext.table(SOURCE_DB + "." + SOURCE_TABLE).select("item_id").rdd

val combinations = items.cartesian(items).filter{case(x,y) => x<y}.cartesian(items).filter{case ((x,y),z) => y<z}

내 로컬 컴퓨터에서 동등한 코드 실행 :

val data = List.fill(1000)(scala.util.Random.nextInt(999))
val rdd = sparkContext.parallelize(data)
val combinations = rdd.cartesian(rdd).filter{case(x,y) => x<y}.cartesian(rdd).filter{case ((x,y),z) => y<z}

combinations.count
// res5: Long = 165623528

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

MySQL의 3 개 범주에서 가능한 모든 조합을 가져옵니다.

분류에서Dev

3 개의 문자열 목록에서 가능한 모든 요소 조합을 생성 하시겠습니까?

분류에서Dev

R에서 모든 n 개 요소 그룹의 벡터에서 최소값을 가져옵니다.

분류에서Dev

3 개의 다른 세트 내에서 가능한 모든 조합 얻기

분류에서Dev

R은 n 개 요소로 구성된 문자형 벡터에서 크기 m의 가능한 모든 조합을 생성합니다.

분류에서Dev

n 개의 문자열로 분할 될 때 가능한 모든 문자열 조합을 반환합니다.

분류에서Dev

객체의 arraylist의 arraylist에서 가능한 모든 조합을 가져옵니다.

분류에서Dev

Python에서 세 벡터 요소의 가능한 모든 조합

분류에서Dev

다른 열을 유지하면서 특정 열의 가능한 모든 조합을 가져옵니다.

분류에서Dev

가능한 모든 조합을 출력하기 위해 3 개의 서로 다른 변수에 대한 루프를 만듭니다.

분류에서Dev

n 명의 사용자를 k 개의 그룹에 넣는 가능한 모든 방법을 만듭니다.

분류에서Dev

REST 문서에 각 요청 매개 변수의 가능한 모든 값이 포함되어야합니까?

분류에서Dev

Matlab : 2 개의 벡터에서 가능한 모든 조합을 찾는 방법은 무엇입니까?

분류에서Dev

합계가 N 인 가능한 3 개의 양의 정수를 모두 생성합니다.

분류에서Dev

2 개의 다른 열에서 동일한 값과 일치하는 모든 행을 가져옵니다.

분류에서Dev

다음에서 n 개 요소로 가능한 모든 고유 샘플 생성

분류에서Dev

css 속성의 사용 가능한 모든 값을 가져옵니다.

분류에서Dev

테이블 1에서 2 개의 값을 가져오고 테이블 2에서 가능한 모든 옵션을 결합하는 SQL 쿼리

분류에서Dev

3 개의 변수에 대해 가능한 모든 상관 행렬 생성

분류에서Dev

C #에서 값 범위의 가능한 모든 조합 실행

분류에서Dev

개체 배열에서 지정된 모든 요소의 합계를 가져옵니다.

분류에서Dev

길이가 n 인 가능한 모든 이진 튜플의 목록을 가져옵니다.

분류에서Dev

2 개의 Python 목록을 반복하고 모든 x에서 y 조합을 가져옵니다.

분류에서Dev

Excel에서 두 열의 내용을 가능한 모든 조합

분류에서Dev

합이 3 이하가되도록 5 개의 이진수로 가능한 모든 조합을 생성합니다.

분류에서Dev

두 개의 조인 된 테이블의 모든 행을 한 번에 가져옵니다.

분류에서Dev

가능한 모든 조합에서 한 번에 두 개의 변수를 사용하여 루핑-UNIX

분류에서Dev

R : 각각 2 개의 조건을 가진 요소의 벡터에서 모든 길이의 모든 조합

분류에서Dev

크기가 n 목록의 모든 가능한 K 조합

Related 관련 기사

  1. 1

    MySQL의 3 개 범주에서 가능한 모든 조합을 가져옵니다.

  2. 2

    3 개의 문자열 목록에서 가능한 모든 요소 조합을 생성 하시겠습니까?

  3. 3

    R에서 모든 n 개 요소 그룹의 벡터에서 최소값을 가져옵니다.

  4. 4

    3 개의 다른 세트 내에서 가능한 모든 조합 얻기

  5. 5

    R은 n 개 요소로 구성된 문자형 벡터에서 크기 m의 가능한 모든 조합을 생성합니다.

  6. 6

    n 개의 문자열로 분할 될 때 가능한 모든 문자열 조합을 반환합니다.

  7. 7

    객체의 arraylist의 arraylist에서 가능한 모든 조합을 가져옵니다.

  8. 8

    Python에서 세 벡터 요소의 가능한 모든 조합

  9. 9

    다른 열을 유지하면서 특정 열의 가능한 모든 조합을 가져옵니다.

  10. 10

    가능한 모든 조합을 출력하기 위해 3 개의 서로 다른 변수에 대한 루프를 만듭니다.

  11. 11

    n 명의 사용자를 k 개의 그룹에 넣는 가능한 모든 방법을 만듭니다.

  12. 12

    REST 문서에 각 요청 매개 변수의 가능한 모든 값이 포함되어야합니까?

  13. 13

    Matlab : 2 개의 벡터에서 가능한 모든 조합을 찾는 방법은 무엇입니까?

  14. 14

    합계가 N 인 가능한 3 개의 양의 정수를 모두 생성합니다.

  15. 15

    2 개의 다른 열에서 동일한 값과 일치하는 모든 행을 가져옵니다.

  16. 16

    다음에서 n 개 요소로 가능한 모든 고유 샘플 생성

  17. 17

    css 속성의 사용 가능한 모든 값을 가져옵니다.

  18. 18

    테이블 1에서 2 개의 값을 가져오고 테이블 2에서 가능한 모든 옵션을 결합하는 SQL 쿼리

  19. 19

    3 개의 변수에 대해 가능한 모든 상관 행렬 생성

  20. 20

    C #에서 값 범위의 가능한 모든 조합 실행

  21. 21

    개체 배열에서 지정된 모든 요소의 합계를 가져옵니다.

  22. 22

    길이가 n 인 가능한 모든 이진 튜플의 목록을 가져옵니다.

  23. 23

    2 개의 Python 목록을 반복하고 모든 x에서 y 조합을 가져옵니다.

  24. 24

    Excel에서 두 열의 내용을 가능한 모든 조합

  25. 25

    합이 3 이하가되도록 5 개의 이진수로 가능한 모든 조합을 생성합니다.

  26. 26

    두 개의 조인 된 테이블의 모든 행을 한 번에 가져옵니다.

  27. 27

    가능한 모든 조합에서 한 번에 두 개의 변수를 사용하여 루핑-UNIX

  28. 28

    R : 각각 2 개의 조건을 가진 요소의 벡터에서 모든 길이의 모든 조합

  29. 29

    크기가 n 목록의 모든 가능한 K 조합

뜨겁다태그

보관