如果我知道一个数据集的一个给定分区在一个给定的服务器上(例如,假设我知道一个数据库的碎片或区域通过某种特定于数据库的元数据api在该服务器上),那么当我通过sparkcontext.parallelize创建一个rdd时,我能利用这个漏洞吗?基本上,我想从服务器列表中创建一个rdd,并为每台服务器创建一个函数来创建rdd的一个位于同一位置的分区。
t9aqgxwy1#
这可以通过子类化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最后我把这篇文章写成了博客
1条答案
按热度按时间t9aqgxwy1#
这可以通过子类化rdd和重写下面的方法来实现。
这里有一个来自hortonworks的例子:https://github.com/hortonworks-spark/shc/blob/master/core/src/main/scala/org/apache/spark/sql/execution/datasources/hbase/hbasetablescan.scala
最后我把这篇文章写成了博客