spark的translate和action
之前对spark的一直进行学习和操作,最近准备系统的学习一下的。对于translate和action有一定了解,但是不是很全面。所以在这篇博客中整理一下的。
translate
对于一个rdd的操作
函数名 | 目的 | 示例 | 结果 | 备注 |
---|
map() | 将函数应用于RDD中的每个元素,将返回值构成新的RDD | rdd.map(lambd x:x+1) | {2,3,4,5} | 和python的基本用法差不多 |
flatmap() | 将函数应用于RDD中的每个元素,将返回的迭代器的所有内容构成新的RDD。通常用来切分单词 | rdd.flatMap(lambda x:x.split(“,”)) | {1,2,3,2,3,3,3} | |
filter() | 返回一个由通过传给filter()的函数的元素组成的RDD | rdd.filter(x=>x!=1) | | |
| 和python的算法很像 | | | |
distinct() | 去重 | rdd.distinct() | {1,2,3} | .. |
sample(withReplacement,fraction,[seed]) | 对RDD采样,以及是否替换,第一个参数是是否放回,第二个是比例,第三个是随机因子 | rdd.distinc() | .. | |
对于两个rdd的操作
函数名 | 目的 | 示例 | 结果 | 备注 |
---|
union() | 生成一个包含两个RDD中所有元素的RDD | rdd.union(other) | {1,2,3,3,4,5} | |
intersection() | 求两个RDD共同的元素的RDD | rdd.intersection(other) | {3} | |
subtract() | 移除一个RDD中的内容(例如移除训练数据) | rdd.subtract(other) | {1,2} | |
cartesian() | 与另一个RDD的笛卡儿积 | rdd.cartesian(other) | {(1,3),….} | |
action
函数名 | 目的 | 示例 | 结果 |
---|
collect() | 放回RDD中的所有元素 | rdd.collect() | {1,2,3,3} |
count() | RDD中的元素个数 | rdd.count() | 4 |
countByValue() | 各元素在RDD中出现的次数 | rdd.countByValue() | {(1,1)…} |
take(num) | 从RDD中返回num个元素 | rdd.take(2) | {1,2} |
top(num) | 从RDD中放回最前面的num个元素 | rdd.top(2) | {3,3} |
takeOrdered(num)(ordering) | 从RDD中按照提供的顺序放回最前面的num各元素 | rdd。takeOrdered(2)(myOrdering) | {3,3} |
takeSample(withReplacement,num,[seed]) | 从RDD中放回任意一些元素 | rdd.takeSample(false,1) | 非确定的 |
reduce(func) | 并行整合RDD中所有数据 | rdd.reduce((x,y)=>x+y) | 9 |
fold(zero)(func) | 和reduce()一样,但是需要提供初始值 | rdd.fold(0)((x,y)=>x+y) | 9 |
aggregate(zeroValue)(seqOp,combOp) | 和reduce相似,但是通常返回不同类型的函数 | rdd.aggregate((0,0))((x,y)=>(x._1+y,x._2+1),(x,y)=>(x._1+y._1,x._2+y._2)) | |
foreach(func) | 对RDD中的每个元素使用给定的函数 | rdd.foreach() | .. |