Apache Spark:加入多个数据源

时间:2015-03-07 16:23:22

标签: apache-spark

我正在尝试了解新的外部数据源API。 假设我有3个数据源,它们有一个BC列。我想创建一些分区,以便将来自列bc具有相同值的所有数据源的数据加载到同一台机器中。任何建议都是最受欢迎的。

问候

2 个答案:

答案 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。