1
有兩種不同的RDD,我想zipPartition這兩個rdd,在此之前,我希望兩個RDD中具有相同id的分區可以保存在同一個執行程序中,因此zipPartition時不會有任何洗牌。如何將一個分區持久化到Spark中的特定執行器?
有兩種不同的RDD,我想zipPartition這兩個rdd,在此之前,我希望兩個RDD中具有相同id的分區可以保存在同一個執行程序中,因此zipPartition時不會有任何洗牌。如何將一個分區持久化到Spark中的特定執行器?
你將不得不換一個新的RDD,將實現該方法內您的RDD:
def getPreferredLocations(split: Partition): Seq[String]
上述方法告訴調度 - 什麼是其中一個給定的分區應計算的首選地點。
[我在面對2個RDD上的Hashjoin時發生了類似的問題,並對此進行了博客。你可能想看看here。]
謝謝,但似乎我們應該知道每臺機器的IP提前,是否有方法來指定每個分區的執行人ID? – greatji
對,在SparkContext中有一個方法來獲取executorsIds,但它是Spark本地。所以我真的沒有辦法,除了這一點破解。 –
@SachinTyagi https://spark.apache.org/docs/2.0.0/api/java/org/apache/spark/SparkContext.html#makeRDD (scala.collection.Seq,%20scala.reflect.ClassTag)怎麼樣? ?它是否提供100%保證該分區將被放置到特定節點? –