spark Rdd 操作transformaction和action等
為什么80%的碼農都做不了架構師?>>> ??
transformation是惰性的,只有action操作的時候,才會真正執行。spark有很多api,RDD的api只是spark的一部分,是我們用的最多的api,在命令行使用的RDD很方便,但是想要看這些api的后臺,可以使用IDE,在IDE里面寫spark應用,可以觀察的更清楚。
官網有最新的RDD Operations,可以好好參考。
一、Rdd的創建
1 通過已經存在的Scala集合,如:val paraRdd = sc.parallelize(1 to 9, 3);后面那個3是指有三個分區
2 通過HDFS、Hbase等,如:val hdfsRdd = sc.textFile("/usr/ouput", 3);如果/usr/ouput是個文件夾,那么就會把所有的子文件當成一個Rdd。3指的是這個Rdd最少有3個分區,有可能會有更多的分區。
3 其它的RDD的轉換,如map操作,就會產生新的Rdd
二、transformation相當于一個轉換,會將一個RDD轉換,并返回一個新的RDD
1.filter,過濾
scala> textFile.filter(line => line.contains("hello")).count() // 有多少行含有hello?
Rdd里面每行元素都執行filter里的方法,只有返回true的元素才不會被過濾,返回false的元素會被過濾掉。
2.map,對Rdd中每一行元素執行一個函數,并且只會返回一行元素,對比flatMap,如下:
val inputMapRdd = inputRdd.map(line => line.split(" "));
用空格分開來的數據是一個數組,這個數組是Rdd的一個元素。
3.flatMap,對Rdd中每一行元素執行一個函數,有可能返回多行元素,如下:
val inputFlatMapRdd = inputRdd.flatMap(line => line.split(" "));
被空格分開來的每一個數據都是一行元素,這是跟map的本質區別。
4.mapPartitions,對每個partition統一執行函數,比如要對數據庫操作時,可以使用此函數
下面這篇文章講的非常詳細,參考:Spark RDD API詳解(一) Map和Reduce
5.union,將兩個RDD進行合并,不去重。
6.intersection,兩個RDD的交集,并且去重。
7.subtract,該函數類似于intersection,但返回在RDD中出現,并且不在otherRDD中出現的元素,不去重。
8.aggregate
def aggregate[U](zeroValue: U)(seqOp: (U, T) ? U, combOp: (U, U) ? U)(implicit arg0: ClassTag[U]): U
先用函數seqOp對分區每個元素進行操作,然后在和zeroValue操作得到每個分區的值
再用combOp對每個分區的值進行操作,,然后在和zeroValue操作得到最后的值
參考:Spark算子:RDD行動Action操作(3)–aggregate、fold、lookup
9.fold函數同aggregate,只是把seqOp和combOp都使用同一個op函數
def fold(zeroValue: T)(op: (T, T) ? T): T
參考:Spark算子系列文章
三、action相當于執行一個動作,會返回一個結果:
1.count計算行數
scala> textFile.count() // RDD中有多少行?
四、緩存persist,cache
1.cache緩存在內存級別
2.persist緩存級別可調整
3.unpersist移除緩存
五、其他
1.toDebugString
A description of this RDD and its recursive dependencies for debugging.
2.partitions
查看Rdd的partition的數量,如:localRdd.partitions.size。
3.collect,當數據量大時,一定不要使用此方法。
返回Rdd的每一個元素,用數組保存,如果每個元素都是數組,那么就是數組里面包含數組。
參考:
spark中的action和transformation
Spark編程指引(三)-----------------RDD操作,shuffle和持久化
RDD:基于內存的集群計算容錯抽象
Spark RDD API詳解
?
轉載于:https://my.oschina.net/cjun/blog/621593
總結
以上是生活随笔為你收集整理的spark Rdd 操作transformaction和action等的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: myeclipse配置weblogics
- 下一篇: libpng error: Not a