[英]Apache Spark: Join two RDDs with different partitioners
我有 2 個帶有不同分區器的 rdds。
case class Person(name: String, age: Int, school: String)
case class School(name: String, address: String)
rdd1
是Person
的 RDD,我根據人的age
進行了分區,然后將 key 轉換為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)
})
rdd2
是按School
name
分組的School
的 RDD。
val rdd2: RDD[School] = rdd2.groupBy(_.name)
現在, rdd1
是根據人的年齡進行分區的,所以所有相同年齡的人都進入相同的分區。 並且, rdd2
根據學校名稱進行分區(默認情況下)。
我想rdd1.leftOuterJoin(rdd2)
以這樣的方式rdd1
不會被洗牌,因為與 rdd2 相比,rdd1 非常非常大。 另外,我將結果輸出到按age
分區的 Cassandra,因此當前對rdd1
分區將加快后面的寫入過程。
有沒有辦法在沒有以下情況下加入兩個 RDD:1. 混洗rdd1
和 2. 廣播“rdd2”,因為rdd2
大於可用內存。
注意:加入的 rdd 應該根據年齡進行分區。
假設您有兩個 rdds,rdd1 和 rdd2,並且想要應用連接操作。 並且如果 rdds 已分區(設置了分區)。 然后調用 rdd3 = rdd1.join(rdd2) 將使 rdd3 由 rdd1 分區。 rdd3 將始終從 rdd1 中獲取哈希分區(第一個父級,調用 join 的那個)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.