在Spark实际应用中,会用到很多数值处理方法,我将一些比较常用的方法写在这里,供新手向的学习参考一下。
1.1 读取文件至RDD
var rdd = sc.textFile("文件路径")
var rddfromhdfs = sc.textFile("hdfs://hadoop-master-001:9000/hdfs文件路径")
这个当中有很多方法,比较常用的是
//返回一个K,V形式的RDD
sequenceFile[K,V] ()
1.2 缓存到内存
缓存是可以随时用的,但是过多的缓存非常消耗内存资源,所以用的时候需要合理设计
//常用的,持久化
cache()
//不常用的,返回一个List,太占资源,拿来学习用还可以
collect()
//切断“血统”,避免过度占用资源
checkpoint()
1.3 基础转换
没有什么是用基础转换做不了的,如果有那就多用几次。
//把RDD中的元素从一种类型或状态变成另一种,元素个数保持不变
map[U] (f:(T)=>U):RDD[U]
//去重,返回一个没有重复元素的RDD
distinct():RDD[T]
//合并成一个系列的元素,常用于多个Array或者Seq合并成一个Array或者Seq
flapMap[U] (f:(T)=>TraversableOnce[U]):RDD[U]
//同类型RDD合并,并集,元素不去重
union(other:RDD[T]):RDD[T]
//同类型RDD比较,交集,元素去重
intersection(other:RDD[T]):RDD[T]
//同类型RDD比较,非otherRDD元素集,元素不去重
subtract(other:RDD[T]):RDD[T]
//同类型RDD合并,变成K,V形式RDD,要求元素数目相同
zip[U] (other:RDD[U]):RDD[(T,U)]
//将元素和索引号组合成键值对
zipWithIndex():RDD[(T,Long)]
//值类型转换
//是否是某一类型
isInstanceOf[T]():Boolean
//转换为某一类型
asInstanceOf[T]():T
//过滤
filter (f:(T)=>T):RDD[T]
1.4 键值转换
键值转换通常针对的是[K,V]组合的RDD进行的操作,在聚合或者处理JSON数据经常会用的到
//修改value
mapValues[U] (f: (V)=>U): RDD[(K,U)]//将value拆分成多个,并使用同一个K
flatMapValue[U] (f:(V)=>TraversableOnce[U]):RDD[(K,U)]
//折叠处理,一般用于相同K值合并,一般采用累和(0)(_ +_)或者累积(1)( _* _)之类
foldByKey(zreoValue:V)(func:(V,V)=>V):RDD[(K,V)]
//聚合,将相同的K合为一个渠道处理,返回RDD
groupByKey():RDD[(K,Interable[V])]
//聚合,以函数形式处理相同K下的value,返回RDD,是一种简化的聚合
reduceByKey(func:(V,V)=>V):RDD[(K,V)]
//聚合,与上一个相同,返回值为Map
reduceByKeyLocally(func:(V,V)=>V):Map[K,V]
//全外关联,关联不上为空,最多支持三个RDD作为参数同时关联,是底层用法,实际场景用join居多
cogroup[W]( other:RDD[(K,W)]):RDD[(K,(Iterable[V], Iterable[W])]
//内连接
join[W]( other:RDD[(K,W)]):RDD[(K,(V, W)]
//全连接
fullOuterJoin[W]( other:RDD[(K,W)]):RDD[(K,(Option[V], Option[W])]
//左连接
leftOuterJoin[W]( other:RDD[(K,W)]):RDD[(K,(Option[V], W)]
//右连接
rightOuterJoin[W]( other:RDD[(K,W)]):RDD[(K,(V, Option[W]))]
//删除与otherRDD中相同Key的元素
subtractByKey( other:RDD[(K,W)]):RDD[(K,V)]
1.5 行动操作
//第一个元素,非排序的
first()
//元素总数
count()
//元素二元计算 如+ - × ÷
reduce(f: (T,T)=>T)
//按下标获取元素,不排序
take(num:Int):Array[T]
//按降序返回前num个元素
top(num:Int):Array[T]
//按升序返回前num个元素
takeOrdered(num:Int):Array[T]
//聚合,给一个初始值,而后累计操作
fold(zeroValue:T)(op:(T,T)=>T)
//遍历
foreach(f:(T)=>Unit):Unit
//排序,true为升序,false为降序
sordBy[K]( f:(T)=>K, ascending:Bollean=true):RDD[T]//[K,V]操作,
//返回某一K下的所有V
lookup(key:K):Seq[V]
//统计K的数量
countByKey:Map[K,Long]
1.6 存储
//保存为文本文件
saveAsTextFile(path:String):Unit
//保存为SequenceFile文件储存在HDFS上,底层默认调用
saveAsSequenceFile(path:String):Unit
//保存为序列化的对象
saveAsObjectFile(path:String):Unit
//保存到新版Hadoop的HDFS上
saveAsHadoopFile(path:String):Unit