Spark RDD亲和性/手动将分区与数据并置

时间:2016-10-24 22:10:36

标签: apache-spark

如果我知道数据集的给定分区在给定服务器上(例如,让我知道数据库的分片或区域是通过某种特定于数据库的元数据API在该服务器上)我可以通过SparkContext.parallelize创建RDD时利用它吗?基本上我想从服务器列表创建RDD,并且为每个服务器创建一个用于创建RDD的共址分区的函数。

1 个答案:

答案 0 :(得分:3)

这可以通过继承RDD并覆盖下面的方法来实现。

/**
 * Optionally overridden by subclasses to specify placement preferences.
 */
protected def getPreferredLocations(split: Partition): Seq[String] = Nil

这里有一个来自Hortonworks的例子:https://github.com/hortonworks-spark/shc/blob/master/core/src/main/scala/org/apache/spark/sql/execution/datasources/hbase/HBaseTableScan.scala

我最后写了as a blog post