join - write - 스파크 파티션



Apache Spark:다른 파티션을 가진 두 개의 RDD에 참여하십시오. (1)

저는 다른 파티원들과 함께 2 rdds를 가지고 있습니다.

case class Person(name: String, age: Int, school: String)
case class School(name: String, address: String)

rdd1 은 내가 사람의 age 를 기준으로 분할 한 Person 의 RDD이며 키를 school 로 변환합니다.

val rdd1: RDD[Person] = rdd1.keyBy(person => (person.age, person))
                            .partitionBy(new HashPartitioner(10))
                            .mapPartitions(persons => 
                                 persons.map{case(age,person) => 
                                    (person.school, person)
                            })

rdd2School name 으로 그룹화 된 RDD입니다.

val rdd2: RDD[School] = rdd2.groupBy(_.name)

이제 rdd1 은 사람의 나이를 기준으로 분할되므로 동일한 연령대의 모든 사람이 같은 파티션으로 이동합니다. 그리고 rdd2 는 기본적으로 학교 이름에 따라 분할됩니다.

나는 rdd1이 rdd2와 비교하여 매우 크기 때문에 rdd1이 섞이지 않도록 rdd1.leftOuterJoin(rdd2) 를 원한다. 또한, age 분할 된 카산드라에 결과를 출력하므로, rdd1 현재 파티셔닝은 나중에 작성 과정을 고정시킵니다.

거기에 2 개의 RDD에 참여할 수있는 방법이 있습니까? 1. rdd1 과 2를 rdd2 가 사용 가능한 메모리보다 크기 때문에 'rdd2'를 rdd2 하십시오.

참고 : 결합 된 rdd는 연령에 따라 분할되어야합니다.


두 개의 rdd, rdd1 및 rdd2가 있고 결합 조작을 적용하려고한다고 가정합니다. rdds가 분할 된 경우 (파티션이 설정된 경우). rdd3 = rdd1.join (rdd2)를 호출하면 rdd3을 rdd1로 분할합니다. rdd3은 항상 rdd1 (첫 번째 상위, 조인이 호출 된 상위)에서 해시 파티션을 가져옵니다.