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