Spark快速入门(4) 核心概念和抽象:Actions

之前我们讲过,Spark中的transformations,只有在真正需要的时候才会执行计算,这里计算的触发器被称作actions。

Driver & Executors

我们先来介绍一些相关概念。当我们调用Spark应用时,它是在driver程序中运行的,driver程序驱使(drive)了我们Spark应用的执行。Driver将Spark应用的执行过程,分成若干个tasks,每个task在一个executor上执行。

当在local模式下运行时,executors和driver程序运行在一个进程中;当在cluster模式下运行时,executors会在cluster中的任何一台机器执行,以利用cluster的资源。

Actions

Actions是对RDD的操作,它触发了数据的物化(materialize),在executors上执行,并将结果返回给driver。Actions和transformations的代码一起,被发送到executors上执行,而不是在driver程序中执行,driver只会接收运行结果。

下面介绍一些常见的actions算子:

  • collect():将所有数据发送到driver中,适用于小数据集结果,防止driver的内存溢出;
  • take(n: Int):随机选择n个数据发送到driver中,take会访问尽可能少的数据分区,以加快读取时间;
  • top(n: Int):选择前n个数据发送到driver中;
  • reduce(f: (T, T) -> T):将数据集的所有数据,经过一个满足交换律和结合律的方法,得到计算结果并发送到driver中。
  • saveAsTextFile(path: String):每个executor将它计算的分区数据,转换为字符串之后,写入到指定目录下的文件,并返回给driver确认信息。一般可以用于简单应用的完整debug。
  • saveAsHadoopFile(path: String, outputFormatClass: String):每个executor将它计算的分区数据,按照指定的Hadoop存储格式,写入到指定目录下的文件,并返回给driver确认信息。
  • foreach(f: T -> ()):每个executor调用f,处理每个数据,并返回给driver确认信息。可以通过此方法实现将数据写入到数据库中,或将数据发送到其他外部服务等。
  • foreachPartition(f: Iterator[T] -> ()):每个executor调用f,对executor的分区进行处理,并返回给driver确认信息。

这里列举的是最常用的actions算子,此外还有一些类似快捷方式的算子,比如count,sum等,可以在文档中查找使用方法。

小结

Actions是触发数据集计算和执行的关键,actions的执行通常是在executors上,并将结果返回给driver,actions可以用来收集、保存和打印数据等等。

你可能感兴趣的:(Spark快速入门(4) 核心概念和抽象:Actions)