sc.textFile用於從文件中讀取,sc.parallelize用於python對象生成rdd
Spark的SparkContext通過textFile()讀取數據生成內存中的RDD,支持本地文件系統、分布式文件系統HDFS及Amazon S3(雲端存儲服務)等等;
對於RDD而言,每壹次轉換操作都會產生不同的RDD,供壹個操作使用;
轉換得到的RDD是惰性求值的,也就是說,整個轉換過程只是記錄了轉換的軌跡,並不會發生真正的計算,只有遇到行動操作時,才會發生真正的計算,從源頭開始進行“從頭到尾”的計算操作。
filter(func) 篩選出滿足函數func的元素,並返回壹個新的數據集;
map(func)將每個元素傳遞到函數func中,並將結果返回為壹個新的數據集;
flatMap(func)與map()類似,但每個輸入元素都可以映射到0個或多個輸出結果;
groupByKey()應用於(key, value)鍵值對的數據集時,返回壹個新的(key, iterable)形式的數據集;
reduceByKey(func)應用於(key,value)鍵值對的數據集時,返回壹個新的(key,value)形式的數據集,其中每個值是將每個key傳遞到函數func中進行聚合後的結果;
count()返回數據集中的元素個數;
collect()以數組的形式返回數據集中的所有元素;
first()返回數據集中的第壹個元素;
take(n)以數組的形式返回數據集中的前n個元素;
reduce(func)通過函數func(輸入兩個參數並返回壹個值)聚合數據集中的元素;
foreach(func)將數據集中的每個元素傳遞到函數func中運行。
1.可以通過持久化(緩存)機制避免重復計算的開銷;
可以使用persist()方法對壹個RDD標記為持久化;
之所以說標記為持久化,是因為出現persist()語句的地方,並不會馬上計算生成RDD並把他持久化,而是要等到遇到第壹個行動操作觸發真正計算以後,才會把計算結果持久化;
持久化後的RDD將會被保留在計算節點的內存中被後面的行動操作重復使用。
persist()對壹個rdd標記為持久化,並不會馬上開始計算生成RDD並把它持久化;動作類型操作才會真正把它持久化。
rdd.persist(MEMORY_ONLY)存儲在內存中,內存不足,替換內容;rdd.persist(MEMORY_ONLY)效果同rdd.cache()
rdd.persist(MEMORY_AND_DISK)存儲在內存中,內存不足,存放磁盤;
rdd.unpersist()手動把持久化的rdd從緩存中刪除;
分區能增加並行度;
減少通信開銷;
分區個數盡量等於集群中CPU核心數目;
local模式默認分區個數為本地的CPU個數,若設置了local[N]則為N個;
apache mesos模式分區數目默認為8;
分區設置方法
spark分區有哈希分區、自定義分區及區域分區三種;
統計壹個文本文件中每個單詞出現的次數