基础
要描述RDD的基础,考虑以下简单的程序:
val lines = sc.textFile("data.txt")
val lineLengths = lines.map(s => s.length)
val totalLength = lineLengths.reduce((a, b) => a + b)
第一行定义了一个基本的RDD。这个数据集没有加载到内存和行动:行仅仅是指向了文件。
第二行定义了lineLengths作为一个map转换的结果,此外,因为转换操作的惰性原因,lineLengths没有立即计算。最后,我们运行reduce,这是一个行动操作。在这个时候,Spark会启动计算任务,然后在各个机器上执行,每台机器运行它自己的map部分和本地reduction,最后返回结果到驱动程序。
如果你想随后还使用lineLengths,我们可以持久化到内存:
lineLengths.persist()
在reduce之前,在lineLengths首次计算之后,会使得lineLengths保存在内存中。