[Apache Spark大資料分析入門(一)(http://www.csdn.net/article/2015-11-25/2826324)
spark 筆記 5: SparkContext,SparkConf
spark讀取hbase
Scala 強大的集合資料操作樣本
spark中的一些RDD操作以及變換
# 建立textFileRDDval textFile = sc.textFile("README.md")textFile.first() #擷取textFile RDD的第一個元素res3:String = # Apache Spark# 篩選出包括Spark關鍵字的RDD然後進行行計數val linesWithSpark = textFile.filter(line => line.contains("Spark"))linesWithSpark.count()res10:Long = 19# 找出RDD textFile中包含單詞數最多的行textFile.map(line=>line.split(" ").size).reduce((a,b)=>Math.max(a,b))res12:Int = 14 #第14行是包含單詞最多的行# 在scala shell中引入Java方法:import java.lang.MathtextFile.map(line=>line.split(" ").size).reduce((a,b) => Math.max(a,b))#將RDD linesWithSpark 緩衝,然後進行計數linesWithSpark.cache()res13:linesWithSpark.type = MapPartitionsRDD[8] at filter at <console>:23linesWithSpark.count()res15:Long = 19
RDD:
makeRDD 和 parallelize是一樣的,不過makeRDD好像只能scala用,parallelize是Python和 R都能用的
# 通過單字清單集合建立RDD thingsRDDval thingsRDD = sc.parallelize(List("spoon","fork","plate","cup","bottle"))# 計算RDD thingsRDD中單詞的個數thingsRDD.count()res16:Long = 5
groupByKey( )轉換操作
pairRDD.groupByKey()#得到:Banana [Yellow]Apple [Red, Green]Kiwi [Green]FIgs [Black]
collect 或 materialize linesWithSpark RDD中的資料
collect方法返回計算好的數值。。。
linesWithSpark.collect()
緩衝RDD linesWithSpark
linesWithSpark.cache()
將linesWithSpark從記憶體中刪除
linesWithSpark,unpersist()
RDD的部分轉換操作:
| 轉換操作 |
作用 |
| filter() |
過濾 |
| map() |
將一個RDD中的每個資料項目,通過map中的函數映射為一個新的元素,返回集合對象 |
| flatMap() |
先map,再將所有的輸出分區合并成一個。 |
| distinct() |
對RDD中的元素進行去重操作 |
| coalesce() |
將RDD進行重新分區,使用HashPartitioner |
| repartition() |
coalesce函數第二個參數為true的實現 |
| sample() |
|
| union() |
將2個RDD合并,不去重 |
| intersection() |
返回兩個RDD的交集,並且去重 |
| subtract |
類似intersection,返回在RDD中出現,並且不在otherRDD中出現的元素,不去重。 |
| mapPartitions |
與map類似,按分區進行映射 |
| mapPartitionsWithIndex |
同mapPartitions,多提供了2個參數 |
| zip |
用於將兩個RDD組合成Key/Value形式的RDD,這裡預設兩個RDD的partition數量以及元素數量都相同,否則會拋出異常。 |
| zipPartitions |
將多個RDD按照partition組合成為新的RDD,該函數需要組合的RDD具有相同的分區數,但對於每個分區的元素數量沒有要求 |
| partitionBy |
|
| mapValues |
|
| flatMapValues |
|
| combineByKey |
|
| foldByKey |
|
| groupByKey() |
|
| reduceByKey() |
|
| reduceByKeyLocally |
|
| randomSplit() |
根據weights權重,將一個RDD切分成多個RDD |
| Action操作 |
說明 |
| first |
|
| count |
|
| reduce |
|
| collect |
|
| take |
|
| top |
|
| takeOrdered |
|
| aggregate |
|
| fold |
|
| lookup |
|
| countByKey |
|
| foreach |
|
| foreachPartition |
|
| sortBy |
|
| saveAsTextFile |
|
| saveAsSequenceFile |
|
| saveAsObjectFile |
|