基礎Spark中的RDD是一個不可變的分佈式對象集合。每一個RDD都被分爲多個分區,這些分區運行在集羣中的不一樣節點上。RDD能夠包含Python、java、Scala中任意類型的對象,甚至能夠包含用戶自定義的對象。兩種方法建立RDD:
1. 讀取一個外部數據集 2. 在驅動器程序裏分發驅動器程序中的對象集合(好比list和set)。
RDD 支持的操做:java
1. 轉化操做(transformation):一個RDD生成一個新的RDD。 2. 行動操做(action):會對RDD計算出一個結果,並把結果返回到驅動器程序中,或把結果存儲到外部。 3. 雖能夠在任什麼時候候定義新的RDD,但Spark只會惰性計算這些RDD。他們只有第一次在一個行動操做中用到時,纔會真正計算。 4. 默認狀況下,Spark的RDD會在你每次對他們進行行動操做時從新計算。(在任什麼時候候都能進行重算是咱們爲何把RDD描述爲「彈性的緣由」)若是想在多個行動操做中重用同一個RDD,可使用RDD.persist()讓Spark把這個RDD緩存下來。
每一個Spark程序或shell會話都按以下方式工做。
1. 從外部數據建立出輸入RDD。 2. 使用諸如filter()這樣的轉化操做對RDD進行轉化,以定義新的RDD。 3. 告訴Spark對須要被重用的中間結果RDD執行persist()操做。 4. 使用行動操做(例如count()和first()等)來觸發一次並行計算,Spark會對計算進行優化後再執行。
errorsRDD = inputRDD.filter(lambad x:"error" in x)
warningsRDD = inputRDD.filter(lamdba x: "warning" in x)
badLinesRDD = errorsRDD.union(warningRDD)shell
cache()與使用默認存儲級別調用persist()是同樣的。
count()返回計數結果
take() 收集RDD中的一些元素編程
歡迎關注個人公號:彪悍大藍貓,持續分享大數據、SpringCloud乾貨~緩存