这篇文章将继续介绍spark算子之Actions算子。
Actions算子
算子 | 说明 |
---|---|
foreach | 对RDD中的每个元素应用f函数。 |
saveAsTextFile | 将RDD保存为文本文件。路径path可以是本地路径或HDFS地址,保存方法是对RDD成员调用toString函数。 |
saveAsObjectFile | 用于将RDD中的元素序列化成对象,存储到文件中。对于HDFS,默认采用SequenceFile保存 |
collect | 以Array的形式返回RDD中的所有元素,仅限数据量比较少的时候使用。 |
collectAsMap | 返回hashMap包含所有RDD中的分片,key如果重复,后边的元素会覆盖前面的元素。 |
reduceByKeyLocally | 将RDD[K,V]中每个K对应的V值根据映射函数来运算,运算结果映射到一个Map[K,V]中,而不是RDD[K,V]。相当于先执行reduce,再执行collectAsMap。 |
lookup | 用于[K,V]类型的RDD,根据指定的K值,查找该K对应的所有V值并返回。 |
count | 返回RDD中元素的个数。 |
first | 返回RDD中的第一个元素,不排序。 |
top | 用于从RDD中,按照默认(降序)或者指定的排序规则,返回前num个元素。 |
take | take用于获取RDD中从0到num-1下标的元素,不排序。 |
takeOrdered | 与top类似,只不过以和top相反的顺序返回元素。 |
reduce | 根据映射函数f,对RDD中的元素进行二元计算,返回计算结果。 |
fold | 使用给定的关联函数和“zero value”来聚合RDD中每个分区的元素,然后聚合所有分区的结果。结果为:(分区数+1)*(zero value)+所有元素的和 |
aggregate | 用于聚合RDD中的元素,先使用第一个函数(seqOp)将RDD中每个分区中的T类型元素聚合成U类型,再使用第二个函数(combOp)将之前每个分区聚合后的U类型聚合成U类型,特别注意seqOp和combOp都会使用zeroValue的值,zeroValue的类型为U。 |
1.foreach
实例1
scala代码
def f(x:String):Unit={
println("hello "+x)
}
val a = sc.parallelize(List("tom", "lucy", "alex", "july", "alina", "andy"), 2)
a.foreach(f)
结果:
python代码
def f(x): print("hello "+x)
a = sc.parallelize(["tom", "lucy", "alex", "july", "alina", "andy"], 2)
a.foreach(f)
结果:
2.saveAsTextFile
实例1
scala代码
val a = sc.parallelize(1 to 1000,3)
a.saveAsTextFile("/root/1.txt")
结果:
也可将文件保存到hdfs上,代码如下:
val a = sc.parallelize(1 to 1000,3)
a.saveAsTextFile("hdfs://master:9000/user/root/1.txt")
结果:
python代码
a = sc.parallelize(range(1 , 1000+1),3)
a.saveAsTextFile("/root/2.txt")
结果:
3.saveAsObjectFile
实例1
scala代码
val a = sc.parallelize(1 to 10,3)
a.saveAsObjectFile("/root/objFile")
val b = sc.objectFile[Int]("/root/objFile")
b.collect
结果: