我简要介绍了IgniteRDD的代码,
class IgniteSqlRDD[R: ClassTag, T, K, V](
ic: IgniteContext,
cacheName: String,
cacheCfg: CacheConfiguration[K, V],
qry: Query[T],
conv: (T) ⇒ R,
keepBinary: Boolean
) extends IgniteAbstractRDD[R, K, V](ic, cacheName, cacheCfg, keepBinary) {
override def compute(split: Partition, context: TaskContext): Iterator[R] = {
new IgniteQueryIterator[T, R](ensureCache().query(qry).iterator(), conv)
}
override protected def getPartitions: Array[Partition] = {
Array(new IgnitePartition(0))
}
}
我注意到它已经硬编码了只有一个分区的数量,这将显着降低并行性为1的性能。我会问为什么它如此设计,谢谢!
答案 0 :(得分:1)
geom_line()
是一个内部实现,仅用于完全提取到驱动程序的结果集,因此不会分发此RDD。因此只有一个分区。
dput(graphOR1)
表示分发的Ignite缓存。