Apache Spark:加入多个数据源

Apache Spark : Joining multiple datasources

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

问候

我建议你像

// Convert your RDD into a (Key,Value) PairRDD val dataByBc=data.map(row => (row.getBc(), row)) // Repartition val dataByBcPart = dataByBc.partitionBy(HashPartitioner(1000))

正如我对@G Quintana 回答的评论,我认为无法保证第一个数据源中包含给定 BC 值(比方说 BC1)的值的分区放在同一个worker 作为第二个或第三个数据源中包含 BC1 的分区,因为您无法说明分区如何分配给物理节点。

由我决定,唯一的方法是创建一个新的 RDD,它是你们三个来源的联合,并对生成的 RDD 进行重新分区。

此外,我建议使用与@G Quintana 提出的方法不同的重新分区方法,即:编写您自己的 Partitioner,如 https://www.safaribooksonline.com/library/view/learning-spark/9781449359034/ch04.html 一章中所述19=]自定义分区。通过这种方式,您不必创建 PairRDD,但您可以根据需要重新分区 RDD。