我正在尝试了解新的外部数据源API。 假设我有3个数据源,它们有一个BC列。我想创建一些分区,以便将来自列bc具有相同值的所有数据源的数据加载到同一台机器中。任何建议都是最受欢迎的。
问候
答案 0 :(得分:-1)
我建议你这样的事情
// Convert your RDD into a (Key,Value) PairRDD
val dataByBc=data.map(row => (row.getBc(), row))
// Repartition
val dataByBcPart = dataByBc.partitionBy(HashPartitioner(1000))
答案 1 :(得分:-1)
正如我对@G Quintana的回答所说,我不认为可以保证第一个数据源中包含给定BC值(让我们说BC1)的值的分区是与第二个或第三个数据源中包含BC1的分区放在同一个worker上,因为您无法说明如何将分区分配给物理节点。
获取此功能的唯一方法是创建一个新的RDD,它是三个源的联合并重新分配生成的RDD。
此外,我建议使用不同的方法进行重新分区,而不是@G Quintana提出的方法,即:编写自己的Partitioner
,如自定义章节中https://www.safaribooksonline.com/library/view/learning-spark/9781449359034/ch04.html所述Partitioners 即可。这样您就不必创建PairRDD
,但您可以根据需要重新分配您的RDD。