Spark系列修煉 入門筆記18

2021-07-25 03:25:56 字數 3301 閱讀 2754

核心內容:

1、spark當中常用的3種建立rdd的方式

2、自定義分片個數(並行度)

今天又學習了一講spark(spark本身就是乙個計算框架,就是乙個jvm計算框架而已),2023年12月份注定不平凡了,希望在2023年的最後乙個月份多做一些有意義的事情,畢業在即……

好了,進入文章的正題,從學習spark到現在,一直離不開乙個概念rdd(彈性分布式資料集),今天主要學習關於rdd的三種建立方式,今天打算寫一篇好的部落格呢!

spark中的一切演算法的操作都是基於rdd的,而且所有操作的運算元都至少會產生乙個rdd,即spark是基於rdd的。

從上面的例子可以看出,textfile這個運算元雖然是讀取檔案,但是是產生了2個rdd。

在此思考乙個問題,為什麼在建立spark中rdd的時候會有很多種不同的方式呢?

答案:因為spark會基於不同的介質進行計算,spark可以執行在不同的檔案系統(比如本地檔案系統、hadoop的分布式檔案系統hdfs等)和儲存介質之上,所以建立rdd就會有很多種不同的方式。並且通常情況下我們建立的第乙個rdd代表和包含了spark整個應用程式輸入資料的**,因此建立的第乙個rdd非常重要

sparkcore基本上提供了三種方式來建立初始的rdd:

1、使用scala的集合—使用程式中的集合去建立rdd

2、使用本地檔案系統 (local filesystem) 建立rdd

3、使用hdfs去建立rdd

當然,這三種建立rdd的方式也代表了應用程式3種不同的資料**。注意:這是3種最基本建立rdd的方式, 基於資料庫建立、nosql(hbase),基於s3、資料流等等都可以建立rdd,本次部落格主要講述這3種最基本建立rdd的方式。

(一)、使用scala的集合—使用程式中的集合去建立rdd

使用scala的集合去建立rdd的這種方式適合程式設計師在本地做除錯時進行使用,檢視執行的結果是否符合預期。

直接上**:

import org.apache.spark.rdd.rdd

import org.apache.spark.

/** * created by hp on 2016/12/3.

* 本程式的目的是使用scala中的集合去建立rdd

*/object

rddbasedoncollections}

檢視執行結果:

sum is:55
其實到這裡我們也可以想到,所謂建立rdd的不同方式無非就是應用程式的資料**不同而已。通過上面的例子可以深刻的說明:spark可以作為乙個單機處理軟體去計算、加工資料,此時spark就相當於乙個本地的jvm軟體。(這種方式我在hadoop中也遇到過,在本地執行模式下hadoop和spark其實就是乙個jvm程式)

接下來我們對上面的這個程式進行詳解,進入會話模式:

從執行結果我們可以看出,sc.parallelize(numbers)產生了乙個rdd:parallelcollectionrdd

好的,我們再次核對一下原始碼:

注意:numslices:指的是平行計算的分片數(其實就是split資料分片、並行度),如果不寫的話就是預設的內容。

呵呵,spark的程式程式設計無非就是建立rdd,轉化已有的rdd。

scala> rdd.collect
檢視結果:

res1: array[int] = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
scala> val rdd =sc.parallelize(numbers,8)
檢視執行結果:

scala> val rdd =sc.parallelize(numbers,32-64)
注意:spark當中並行度的設定和資料的規模是沒有關係的,只和每個task在計算每個partition的時候消耗的記憶體和cpu的數量有關。

(二)使用本地檔案系統 (local filesystem) 建立rdd

問題:使用本地檔案系統建立rdd的作用是什麼呢?主要的目的和集合建立的目的一樣,也是為了做測試。

此時指定的檔案**應該用textfile運算元

場景:計算所有行的長度的總和。

import org.apache.spark.rdd.rdd

import org.apache.spark.

/** * created by hp on 2016/12/2.

* 本程式的目的是使用本地檔案系統去建立rdd

*/object

rddbasedonlocalfile}

執行結果:

69
scala> val rdd = sc.textfile("/word.txt",12)
執行日誌:

呵呵,並行度13滿足我們的條件設定

(三)使用hdfs去建立rdd

使用hdfs去建立rdd是生產環境下最常用的方式,主要就是用spark讀取hdfs中的資料進行處理。

呵呵,黑窗**互式就可了,此時我們的資料**由windows的檔案系統轉化為了hdfs分布式檔案系統。

ok,繼續努力!!!!

Spark系列修煉 入門筆記15

核心內容 1 spark架構入門筆記 2 clustermanager 資源排程 driver 作業執行排程的詳解 今天進一步深入學習了spark,主要學習的內容為spark的核心架構,好的,進入本篇文章的正題。注意 本篇文章談的是spark的stanalone模式。先談一下我自己對於spark程式...

Spark系列修煉 入門筆記17

核心內容 1 rdd入門筆記1 今天又邁出了一步 涉獵rdd,好吧,進入文章的正題 rdd是乙個容錯的,並行的資料結構,可以控制將資料儲存到磁碟或記憶體中,能夠獲取資料的分割槽。通常資料處理的模型包括 迭代計算 關係查詢 mapreduce 流失處理等。hadoop採用mapreduce模型,sto...

Spark入門系列

讀完spark官方文件後,在研究別人的原始碼以及spark的原始碼之前進行一番入門學習,這個系列不錯。spark系列 除此之外,databricks也是乙個非常不錯的 上面可以使用免費的spark集群進行 提交與測試,在youtube以及spark大會中都有其發布教程以及spark應用部署的相關細節...