我试图了解Apache Spark如何在幕后工作。在Spark中编写一点代码后,我非常确定它将RDD
实现为RMI 远程对象,不是吗?
通过这种方式,它可以在转换中修改它们,例如map
s,flatMap
s等。不属于RDD
的对象只是序列化并在执行期间发送给工作人员。
在下面的示例中,lines
和tokens
将被视为远程对象,而字符串toFind
将被简单地序列化并复制到工作人员
val lines: RDD[String] = sc.textFile("large_file.txt")
val toFind = "Some cool string"
val tokens =
lines.flatMap(_ split " ")
.filter(_.contains(toFind))
我错了吗?我用谷歌搜索了一下,但我没有找到任何关于Spark RDD
内部实现的参考。
答案 0 :(得分:1)
你是对的。 Spark序列化闭包以执行远程方法调用。