RDD操作
RDDs支持两种操作类型:转换和行动。
转换:从一个已存在的RDDs,创建一个新的数据集。
行动:在一个数据集中运行一个计算之后,返回一个值到驱动程序。
例如,map是一个转换操作,它通过一个函数传递每一个数据集元素,返回一个新的RDD来呈现结果。另一方面,reduce是一个行动操作,它通过一些函数,聚合RDD的所有元素,返回最后的结果到驱动程序(尽管也有一个并行的reduceByKey,它返回一个分布式数据集)。
在Spark中,所有的转换操作是惰性的,它们并不马上计算结果。相反,它们只是记住了转换发生在哪些数据集上(例如一个文件)。当且仅当,一个行动操作要求一个结果返回给驱动程序时,这些转换才会计算。这种设计使得Spark运行起来更有效率。例如,我们可以发现,通过map创建的数据集将会被reduce使用,并且仅仅返回reduce的结果给驱动程序,而不是更大的map的数据集。
默认情况下,每一个转换的RDD,在每次你在其之上运行行动操作的时候,可能会被重新计算。然而,你也可以使用persist(或cacahe)方法,把一个RDD持久化到内存,在这种情况下,Spark将会保持元素在整个集群中,在下次你要查询它的时候,能够更快的访问。也有支持持久化RDDs到磁盘上,或者跨越多个节点的副本。