action操作有:collect、count、first、foreach、reduce、show、take
下面详细介绍其作用:
collect:将分布式存储在集群上的分布式数据集(比如dataset),中的所有数据都获取到driver端来
count:对dataset中的记录数进行统计个数的操作
first:获取数据集中的第一条数据
foreach:遍历数据集中的每一条数据,对数据进行操作,这个跟collect不同,collect是将数据获取到driver端进行操作,foreach是将计算操作推到集群上去分布式执行
reduce:对数据集中的所有数据进行归约的操作,多条变成一条,用reduce来实现数据集的个数的统计
show:默认将dataset数据打印前20条
take:从数据集中获取指定条数
代码操作案例
package session
import org.apache.spark.sql.SparkSession
object ActionOperation {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder()
.appName(ActionOperation.getClass.getName)
.master("local")
.config("spark.sql.warehouse.dir","d:/spark-warehouse")
.getOrCreate()
import spark.implicits._
val employee = spark.read.json("data\\depart\\employee.json")
employee.collect().foreach(println)
println(employee.count())
println(employee.first())
employee.foreach{println(_)}
println(employee.map(employee=>1).reduce(_+_))
employee.show()
employee.take(3).foreach(println(_))
}
}
输出结果:
第1个action输出:
[25,1,male,Leo,20000]
[30,2,female,Marry,25000]
[35,1,male,Jack,15000]
[42,3,male,Tom,18000]
[21,3,female,Kattie,21000]
[30,2,female,Jen,28000]
[19,2,female,Jen,8000]
第2个action输出:
7
第3个action输出:
[25,1,male,Leo,20000]
第4个action输出:
[25,1,male,Leo,20000]
[30,2,female,Marry,25000]
[35,1,male,Jack,15000]
[42,3,male,Tom,18000]
[21,3,female,Kattie,21000]
[30,2,female,Jen,28000]
[19,2,female,Jen,8000]
第5个action输出:
7
第6个action输出:
+---+-----+------+------+------+
|age|depId|gender| name|salary|
+---+-----+------+------+------+
| 25| 1| male| Leo| 20000|
| 30| 2|female| Marry| 25000|
| 35| 1| male| Jack| 15000|
| 42| 3| male| Tom| 18000|
| 21| 3|female|Kattie| 21000|
| 30| 2|female| Jen| 28000|
| 19| 2|female| Jen| 8000|
+---+-----+------+------+------+
第7个action输出:
[25,1,male,Leo,20000]
[30,2,female,Marry,25000]
[35,1,male,Jack,15000]