我是新手,并且有一般问题。据我所知,整个文件必须在所有工作节点上都可以处理。如果是这样,他们如何知道哪个分区应该读取?驱动程序控制分区但是驱动程序如何告诉他们读取什么分区?
答案 0 :(得分:0)
每个RDD分为多个分区。为了计算每个分区,Spark将生成一个任务并将其分配给一个工作节点。当驱动程序向工作程序发送任务时,它还指定该任务的PartitionID。
然后,worker通过将RDD的迭代器链接到InputRDD并传递PartitionID来执行任务。 InputRDD确定输入的哪个部分对应于指定的分区ID并返回数据。
rddIter.next -> parentRDDIter.next -> grandParentRDDIter.next -> ... -> InputRDDIter.next
答案 1 :(得分:0)
Spark尝试从靠近它的节点将数据读入RDD。由于Spark通常访问分布式分区数据,为了优化转换操作,它创建了用于保存数据块的分区。
https://github.com/jaceklaskowski/mastering-apache-spark-book