Scala in Spark 基本操作【未完】
阿新 • • 發佈:2019-01-06
# 建立textFileRDD
val 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.Math
textFile.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>:23
linesWithSpark.count()
res15:Long = 19
RDD:
makeRDD 和 parallelize是一樣的,不過makeRDD好像只能scala用,parallelize是Python和 R都能用的
# 通過單詞列表集合建立RDD thingsRDD
val 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 |