第4章 Spark編程進(jìn)階_第1頁
第4章 Spark編程進(jìn)階_第2頁
第4章 Spark編程進(jìn)階_第3頁
第4章 Spark編程進(jìn)階_第4頁
第4章 Spark編程進(jìn)階_第5頁
已閱讀5頁,還剩60頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

Spark編程進(jìn)階企業(yè)等市場主體是我國經(jīng)濟(jì)活動的主要參與者、就業(yè)機(jī)會的主要提供者、技術(shù)進(jìn)步的主要推動者。在全面建設(shè)社會主義現(xiàn)代化國家新征程中,如何為企業(yè)培養(yǎng)急需的人才,是教育尤其是高職教育急需解決的重要問題。具體到大數(shù)據(jù)產(chǎn)業(yè),通過組織相關(guān)競賽對新人進(jìn)行培養(yǎng)和考察無疑是一個(gè)很好的解決方案,競賽的發(fā)展與大數(shù)據(jù)技術(shù)人才的培養(yǎng)是互相促進(jìn)的。數(shù)據(jù)競賽通常會作為高校推進(jìn)大數(shù)據(jù)相關(guān)學(xué)科建設(shè)的重要手段,以賽促學(xué),以賽促教,而部分企業(yè)也會通過競賽的方式挖掘優(yōu)秀人才。通過數(shù)據(jù)競賽網(wǎng)站,學(xué)生可以瀏覽和選擇合適的競賽。數(shù)據(jù)競賽網(wǎng)站的出現(xiàn)也意味著有相應(yīng)的用戶訪問記錄;網(wǎng)站運(yùn)營商通過對用戶訪問記錄的分析,可以對當(dāng)前網(wǎng)站或競賽項(xiàng)目進(jìn)行合理、有效的改良,吸引更多的人參與到競賽項(xiàng)目中。任務(wù)背景某競賽網(wǎng)站經(jīng)過幾年的運(yùn)營,保存了眾多用戶對該網(wǎng)站的訪問日志數(shù)據(jù)。為了依據(jù)用戶的歷史瀏覽記錄研究用戶的興趣愛好,改善用戶體驗(yàn),需要對網(wǎng)站用戶的訪問日志數(shù)據(jù)進(jìn)行分析?,F(xiàn)有一份該競賽網(wǎng)站2020年5月至2021年2月的用戶訪問日志數(shù)據(jù)文件raceData.csv,數(shù)據(jù)字段說明如下表。任務(wù)背景字段名稱說明id序號content_id網(wǎng)頁IDuserid用戶IDsessionid會話IDdate_time訪問時(shí)間page_path網(wǎng)址網(wǎng)站的訪問次數(shù)分布情況對網(wǎng)站運(yùn)營商來說是非常重要的指標(biāo)之一,因此需要針對網(wǎng)站的用戶訪問日志數(shù)據(jù),統(tǒng)計(jì)競賽網(wǎng)站每月的訪問量??紤]到網(wǎng)站的用戶訪問日志數(shù)據(jù)的數(shù)據(jù)規(guī)模非常龐大,使用一般的數(shù)據(jù)分析工具處理這些數(shù)據(jù)的效率很低,因此將使用Spark框架對網(wǎng)站的用戶訪問日志數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析,并且為了模擬真實(shí)的生產(chǎn)環(huán)境,將使用IntelliJIDEA工具進(jìn)行Spark編程。首先介紹IntelliJIDEA工具及其Scala插件的安裝過程,并介紹在IntelliJIDEA中配置Spark運(yùn)行環(huán)境的過程。再詳細(xì)介紹如何在開發(fā)環(huán)境中和集群環(huán)境中提交并運(yùn)行Spark程序,結(jié)合競賽網(wǎng)站用戶訪問日志數(shù)據(jù)實(shí)例,在IntelliJIDEA中進(jìn)行Spark編程、實(shí)現(xiàn)網(wǎng)站的訪問量統(tǒng)計(jì)。任務(wù)背景1統(tǒng)計(jì)分析競賽網(wǎng)站用戶訪問日志數(shù)據(jù)目錄搭建Spark開發(fā)環(huán)境2使用Spark框架進(jìn)行數(shù)據(jù)分析需要有合適的編程環(huán)境。第3章介紹了Spark編程的基礎(chǔ)操作,操作的過程是在spark-shell的交互式環(huán)境中進(jìn)行的,這樣的交互式環(huán)境會對每個(gè)指令做出反饋,適合初學(xué)者學(xué)習(xí)或調(diào)試代碼時(shí)使用。而在真實(shí)的生產(chǎn)環(huán)境中,完成一個(gè)任務(wù)通常需要很多行代碼,并且需要多個(gè)類協(xié)作才能實(shí)現(xiàn),因此需要更加適合的開發(fā)環(huán)境,如IntelliJIDEA。本節(jié)的任務(wù)如下。下載并安裝IntelliJIDEA。在IntelliJIDEA中安裝Scala插件,添加Spark開發(fā)依賴包,配置Spark運(yùn)行環(huán)境,實(shí)現(xiàn)Spark工程的創(chuàng)建。Spark程序的編寫與運(yùn)行。任務(wù)描述官網(wǎng):/下載與安裝IntelliJIDEA雙擊下載的安裝包,在彈出的界面選擇“Next”按鈕設(shè)置安裝目錄并點(diǎn)擊“Next”按鈕下載與安裝IntelliJIDEA安裝IDEA步驟點(diǎn)擊“Finish”按鈕完成安裝下載與安裝IntelliJIDEA雙擊桌面生成的IntelliJIDEA圖標(biāo)啟動IntelliJIDEA,或在“開始”菜單中,依次單擊“JetBrains”→“IntelliJIDEACommunityEdition2018.3.6”啟動IntelliJIDEA。下載與安裝IntelliJIDEA點(diǎn)擊左下角的“SkipAllandSetDefaults”,跳過其他設(shè)置并采用默認(rèn)設(shè)置下載與安裝IntelliJIDEA設(shè)置完成,出現(xiàn)如下所示的界面下載與安裝IntelliJIDEA打開IDEA,出現(xiàn)如圖所示界面單擊右下角的“Configure”按鈕選擇“Plugins”選項(xiàng)下載與安裝IntelliJIDEA打開IntelliJIDEA,打開界面右下角的“Configure”下拉列表,選擇“Plugins”選項(xiàng),如左圖。彈出“Plugins”對話框,如右圖,直接單擊“Scala”下方的“Install”按鈕安裝Scala插件即可。Scala插件安裝與使用安裝完成后,單擊“RestartIDE”按鈕重啟IntelliJIDEA。Scala插件安裝與使用在“Plugins”對話框中,單擊按鈕,在下拉列表中選擇“Installpluginfromdisk...”選項(xiàng),彈出下圖的界面,選擇Scala插件所在路徑,單擊“OK”按鈕進(jìn)行安裝。Scala插件安裝與使用2.離線安裝scala插件Scala插件安裝完成后將出現(xiàn)下圖的界面,單擊右側(cè)的“RestartIDE”按鈕重啟IntelliJIDEA。Scala插件安裝與使用選擇“CreateNewProject”選項(xiàng),彈出“NewProject”界面。選擇左側(cè)窗格的“Scala”選項(xiàng),再選擇右側(cè)項(xiàng)目構(gòu)建工具窗格的“IDEA”選項(xiàng),單擊“Next”按鈕進(jìn)入下一步。Scala插件安裝與使用3.測試Scala插件將工程名稱定義為“HelloWorld”,自定義該工程存放路徑,并選擇工程所用JDK和ScalaSDK版本(如果沒有可選擇的版本,那么可以單擊“Create”按鈕選擇,并單擊“OK”按鈕),單擊“Finish”按鈕,完成Scala工程創(chuàng)建。Scala插件安裝與使用Scala工程創(chuàng)建完成后,自動進(jìn)入IntelliJIDEA主界面,在左側(cè)導(dǎo)航欄可以看到創(chuàng)建好的工程,HelloWorld工程結(jié)構(gòu)如下圖。Scala插件安裝與使用右鍵單擊HelloWorld工程下的src文件夾,依次選擇“New”→“Package”選項(xiàng),新建一個(gè)包,包名為“com.tipdm.scalaDemo”。右鍵單擊com.tipdm.scalaDemo包,依次選擇“New”→“ScalaClass”選項(xiàng),在包下新建一個(gè)Scala類。Scala插件安裝與使用將Scala類的類名設(shè)置為“HelloWorld”,并在“Kind”下拉列表中選擇“Object”選項(xiàng),單擊“OK”按鈕,完成Scala類的創(chuàng)建。在類HelloWorld中即可編寫Scala程序。Scala插件安裝與使用選擇菜單欄中的“Run”,再依次選擇“Run”→“HelloWorld”選項(xiàng),若控制臺輸出下圖的結(jié)果,則證明Scala環(huán)境的配置沒有問題。Scala插件安裝與使用點(diǎn)擊菜單欄中的“File”->“ProjectStructure”,打開右上圖所示的界面配置Spark運(yùn)行環(huán)境1.配置Spark開發(fā)依賴包選擇“Libraries”選項(xiàng),單擊“+”按鈕,選擇“Java”選項(xiàng)在彈出的界面中找到Spark安裝目錄下的jars文件夾,將整個(gè)文件夾導(dǎo)入,如圖所示點(diǎn)擊“OK”配置Spark運(yùn)行環(huán)境任何Spark程序都是以SparkContext對象開始的,因?yàn)镾parkContext是Spark應(yīng)用程序的上下文和入口,無論是Scala、Python、R程序,都是通過SparkContext對象的實(shí)例來創(chuàng)建RDD,SparkShell中的sc就是SparkContext對象的實(shí)例。因此在實(shí)際Spark應(yīng)用程序的開發(fā)中,在main方法中需要創(chuàng)建SparkContext對象,作為Spark應(yīng)用程序的入口,并在Spark程序結(jié)束時(shí)關(guān)閉SparkContext對象。配置Spark運(yùn)行環(huán)境2.編寫Spark程序初始化SparkContext需要一個(gè)SparkConf對象,SparkConf包含了Spark集群配置的各種參數(shù),屬性參數(shù)是一種鍵值對的格式,一般可以通過set(屬性名,屬性設(shè)置值)的方法修改屬性。其中還包含了設(shè)置程序名setAppName、設(shè)置運(yùn)行模式setMaster等方法。如下圖所示SparkContext對象的實(shí)例創(chuàng)建完成后,就可以通過實(shí)例變量轉(zhuǎn)化集合或者讀取數(shù)據(jù),計(jì)算過程中轉(zhuǎn)化操作和行動操作的使用方法與在Shell環(huán)境中一致。配置Spark運(yùn)行環(huán)境單詞計(jì)數(shù)編寫Spark程序(1)設(shè)置運(yùn)行模式點(diǎn)擊“Run”→“EditConfigurations...”,彈出對話框如圖所示在VMoptions設(shè)置運(yùn)行模式如果程序有自定義的輸入?yún)?shù),繼續(xù)點(diǎn)擊“Programarguments”參數(shù)值設(shè)置運(yùn)行Spark程序1.開發(fā)環(huán)境下運(yùn)行Spark運(yùn)行模式運(yùn)行Spark程序運(yùn)行模式含義local使用一個(gè)工作線程在本地模式下運(yùn)行Spark(即非并行)local[K]使用K個(gè)工作線程在本地模式下運(yùn)行Spark(理想情況下,將K設(shè)置為機(jī)器上的內(nèi)核數(shù))local[*]在本地模式下運(yùn)行Spark,工作線程與機(jī)器上的邏輯內(nèi)核一樣多spark://HOST:PORT連接到指定端口的Spark獨(dú)立集群上,默認(rèn)為7077端口mesos://HOST:PORT連接到指定端口的Mesos集群yarn根據(jù)配置的值連接到Y(jié)ARN集群,使用yarn-client或yarn-cluster模式--deploy-modeclient客戶端運(yùn)行模式--deploy-modecluster集群運(yùn)行模式(2)指定Hadoop安裝包的bin文件夾的路徑在本地運(yùn)行Spark程序時(shí)還需要指定Hadoop安裝包的bin文件夾的路徑,有兩種方式。第一種是通過設(shè)置參數(shù)的方式進(jìn)行設(shè)置,對應(yīng)參數(shù)名是“hadoop.home.dir”。第二種是在Windows環(huán)境變量的Path變量中添加Hadoop安裝包的bin文件夾的路徑。在Hadoop安裝包的bin文件夾中還需要添加幾個(gè)Hadoop插件,分別是winutils.exe、winutils.pdb、libwinutils.lib、hadoop.exp、hadoop.lib、hadoop.pdb。運(yùn)行Spark程序(3)設(shè)置自定義輸入?yún)?shù)如果程序有自定義的輸入?yún)?shù),那么運(yùn)行程序之前還需要選擇菜單欄中的“Run”→“EditConfigurations...”→“Programarguments”選項(xiàng)進(jìn)行設(shè)置。選擇菜單欄中的“Run”→“Run”選項(xiàng),運(yùn)行“WordCount”程序即可,控制臺的輸出結(jié)果如下圖。運(yùn)行Spark程序直接在開發(fā)環(huán)境中運(yùn)行Spark程序時(shí)通常選擇的是本地模式。如果數(shù)據(jù)的規(guī)模比較龐大,更常用的方式還是在Spark程序開發(fā)測試完成后編譯打包為Java歸檔(JavaArchive,JAR)包,并通過spark-submit命令提交到Spark集群環(huán)境中運(yùn)行。spark-submit的腳本在Spark安裝目錄的/bin目錄下,spark-submit是Spark為所有支持的集群管理器提供的一個(gè)提交作業(yè)的工具。Spark在/example目錄下有Scala、Java、Python和R的示例程序,都可以通過spark-submit運(yùn)行。運(yùn)行Spark程序2.在集群環(huán)境中運(yùn)行Sparkspark-submit提交JAR包到集群有一定的格式要求,需要設(shè)置一些參數(shù),語法如下。./bin/spark-submit--class<main-class>\--master<master-url>\--deploy-mode<deploy-mode>\--conf<"key=value">\...#otheroptions<application-jar>\[application-arguments]運(yùn)行Spark程序spark-submit參數(shù)解釋--class:應(yīng)用程序的入口點(diǎn),指主程序。--master:指定要連接的集群URL??梢越邮盏闹等绫??3所示。--deploy-mode:是否將驅(qū)動程序部署在工作節(jié)點(diǎn)(cluster)或本地作為外部客戶端(client)。--conf:設(shè)置任意Spark配置屬性,即允許使用key=value格式設(shè)置任意的SparkConf配置選項(xiàng)。application-jar:包含應(yīng)用程序和所有依賴關(guān)系的捆綁JAR的路徑。application-arguments:傳遞給主類的main方法的參數(shù)。運(yùn)行Spark程序程序運(yùn)行模式為打包到集群中運(yùn)行運(yùn)行Spark程序(1)在IntelliJIDEA中打包工程(輸出JAR包)選擇“File”→“ProjectStructure”命令選擇“Artifacts”選項(xiàng)選擇“+”

下的“JAR”選項(xiàng)中的“Empty”運(yùn)行Spark程序修改“Name”為自定義的JAR包的名字“word”

,雙擊右側(cè)欄“HelloWorld”下的“'HelloWorld'compileoutput”,它會轉(zhuǎn)移到左側(cè)運(yùn)行Spark程序(2)編譯生成Artifact選擇菜單欄中的“Build”→“BuildArtifacts”命令,如左圖在彈出的方框(右圖)中選擇“word”→“build”運(yùn)行Spark程序生成Artifact后,在工程目錄中會有一個(gè)/out目錄,可以看到生成的JAR包,如左圖。在JAR包處單擊右鍵,在彈出菜單中選擇“ShowinExplorer”命令,直接到達(dá)JAR包路徑下,如右圖。運(yùn)行Spark程序?qū)AR包上傳到Linux的/opt目錄下將Windows本地的words.txt文件也上傳到/opt目錄下將/opt/words.txt上傳到HDFS的/user/root下運(yùn)行Spark程序進(jìn)入Spark安裝目錄的/bin目錄下,使用spark-submit提交Spark程序至集群中運(yùn)行。設(shè)置運(yùn)行模式為集群模式,--class設(shè)置程序入口。再設(shè)置JAR包路徑、輸入文件路徑和輸出文件路徑。運(yùn)行Spark程序spark-submit常用的配置項(xiàng)運(yùn)行Spark程序配置項(xiàng)描述--nameName設(shè)置程序名--jarsJARS添加依賴包--driver-memoryMEMDriver程序使用的內(nèi)存大小--executor-memoryMEMExecutor使用的內(nèi)存大小--total-executor-coresNUMExecutor使用的總內(nèi)核數(shù)--executor-coresNUM每個(gè)Executor使用的內(nèi)核數(shù)--num-executorsNUM啟動的Executor數(shù)量spark.eventLog.dir保存日志相關(guān)信息的路徑,可以是“hdfs://”開頭的HDFS路徑,也可以是“file://”開頭的本地路徑,路徑均需要提前創(chuàng)建spark.eventLog.enabled是否開啟日志記錄spark.cores.max當(dāng)應(yīng)用程序運(yùn)行在Standalone集群或粗粒度共享模式Mesos集群時(shí),應(yīng)用程序向集群(不是每臺機(jī)器,而是整個(gè)集群)請求的最大CPU內(nèi)核總數(shù)。如果不設(shè)置,那么對于Standalone集群將使用spark.deploy.defaultCores指定的數(shù)值,而Mesos集群將使用集群中可用的內(nèi)核1統(tǒng)計(jì)分析競賽網(wǎng)站用戶訪問日志數(shù)據(jù)目錄搭建Spark開發(fā)環(huán)境2網(wǎng)站的訪問量是衡量網(wǎng)站吸引力的重要指標(biāo),raceData.csv文件中有2020年和2021年共兩個(gè)年份的數(shù)據(jù),按年份統(tǒng)計(jì)競賽網(wǎng)站每月的訪問量,展示的結(jié)果會更加清晰,方便網(wǎng)站運(yùn)營人員后續(xù)的分析。本節(jié)的任務(wù)如下。學(xué)習(xí)Spark的持久化(緩存)和數(shù)據(jù)分區(qū)。在IntelliJIDEA中使用Spark編程統(tǒng)計(jì)競賽網(wǎng)站每月的訪問量。按年份分區(qū),將存儲結(jié)果保存至HDFS中。任務(wù)描述由于SparkRDD是惰性求值的,因此如果需要多次使用同一個(gè)RDD,那么調(diào)用行動操作時(shí)每次都需要計(jì)算該RDD并執(zhí)行它依賴的其他轉(zhuǎn)換操作。在需要進(jìn)行多次迭代的計(jì)算中,由于常常需要多次使用同一組數(shù)據(jù),因此計(jì)算資源消耗會非常大,為了避免多次計(jì)算同一個(gè)RDD,可以在Spark中設(shè)置數(shù)據(jù)持久化。設(shè)置RDD持久化每個(gè)RDD一般情況下是由多個(gè)分區(qū)組成的,RDD的數(shù)據(jù)分布在多個(gè)節(jié)點(diǎn)中,因此Spark持久化RDD數(shù)據(jù)時(shí),由參與計(jì)算該RDD的節(jié)點(diǎn)各自保存所求出的分區(qū)數(shù)據(jù)。持久化RDD后,再使用該RDD時(shí)將不需要重新計(jì)算,直接獲取各分區(qū)保存好的數(shù)據(jù)即可。如果其中有一個(gè)節(jié)點(diǎn)因?yàn)槟撤N原因出現(xiàn)故障,那么Spark不需要計(jì)算所有分區(qū)的數(shù)據(jù),只需要重新計(jì)算丟失的分區(qū)數(shù)據(jù)即可。如果希望節(jié)點(diǎn)故障不影響執(zhí)行速度,那么在內(nèi)存充足的情況下,可以使用雙副本保存的高可靠機(jī)制,當(dāng)其中一個(gè)副本有分區(qū)數(shù)據(jù)丟失時(shí),則會從另一個(gè)副本中讀取數(shù)據(jù)。設(shè)置RDD持久化RDD的持久化操作有cache()和persist()兩種方法。每一個(gè)RDD都可以用不同的存儲級別進(jìn)行保存,從而允許持久化數(shù)據(jù)集在硬盤或內(nèi)存中作為序列化的Java對象,甚至跨節(jié)點(diǎn)復(fù)制。存儲級別是通過org.apache.spark.storage.StorageLevel對象確定的。cache()方法是使用默認(rèn)存儲級別的快捷方法,也就是StorageLevel.MEMORY_ONLY(將反序列化的對象存入內(nèi)存)設(shè)置RDD持久化設(shè)置RDD持久化org.apache.spark.storage.StorageLevel中的常用存儲級別級別所需內(nèi)存空間程度所需CPU計(jì)算時(shí)間程度是否在內(nèi)存中是否在磁盤上備注MEMORY_ONLY高低是否數(shù)據(jù)僅保留在內(nèi)存中MEMOTY_ONLY_SER低高是否數(shù)據(jù)序列化后保存在內(nèi)存中MEMORY_AND_DISK高中等部分部分?jǐn)?shù)據(jù)先寫到內(nèi)存中,內(nèi)存放不下則溢寫到磁盤上MEMORY_AND_DISK_SER低高部分部分序列化的數(shù)據(jù)先寫到內(nèi)存中,內(nèi)存不足則溢寫到磁盤上DISK_ONLY低高否是數(shù)據(jù)僅存在磁盤上轉(zhuǎn)化一個(gè)集合為RDD,然后將RDD中的每個(gè)值都進(jìn)行平方,設(shè)置存儲級別為MEMORY_ONLY,通過RDD的數(shù)值計(jì)算方法分別計(jì)算平均值和求和,并輸出結(jié)果。如圖4-29所示,如果不持久化RDDdata,那么求和和求均值時(shí)都會對data進(jìn)行計(jì)算,而持久化RDD后,只有在輸出求和結(jié)果時(shí)會計(jì)算data,求均值時(shí)是直接從內(nèi)存中讀取數(shù)據(jù)的。設(shè)置RDD持久化SparkRDD是多個(gè)分區(qū)組成的數(shù)據(jù)集合,在分布式程序中,通信的代價(jià)是很大的,因此控制數(shù)據(jù)分區(qū)、減少網(wǎng)絡(luò)傳輸是提高整體性能的一個(gè)重要的方面。只有鍵值對類型的RDD才能設(shè)置分區(qū)方式,非鍵值對類型的RDD分區(qū)的值是None。系統(tǒng)是根據(jù)一個(gè)針對鍵的函數(shù)對元素進(jìn)行分區(qū)的,雖然不能控制每個(gè)鍵具體劃分到哪個(gè)節(jié)點(diǎn),但是可以控制相同的鍵落在同一個(gè)分區(qū)。每個(gè)RDD的分區(qū)ID范圍是0~(numPartitions?1),決定這個(gè)值是屬于哪個(gè)分區(qū)的,numPartitions是分區(qū)的個(gè)數(shù)。設(shè)置分區(qū)方式使用的是partitionBy()方法,需要傳遞一種分區(qū)方式作為參數(shù)。設(shè)置數(shù)據(jù)分區(qū)Spark的系統(tǒng)分區(qū)方式哈希分區(qū)(HashPartitioner),根據(jù)哈希值分區(qū)范圍分區(qū)(RangePartitioner),將一定范圍的數(shù)據(jù)映射到一個(gè)分區(qū)中用戶也可以通過自定義分區(qū)器完成特定的分區(qū)要求。設(shè)置數(shù)據(jù)分區(qū)實(shí)現(xiàn)自定義分區(qū)器,需要繼承org.apache.spark.Partitioner類并實(shí)現(xiàn)其中的3個(gè)方法。defnumPartitions:Int:這個(gè)方法返回想要創(chuàng)建的分區(qū)個(gè)數(shù)defgetPartition(key:Any):這個(gè)函數(shù)需要對輸入的key做處理,然后返回該key的分區(qū)ID,范圍一定是0~numPartitions-1。equals(other:Any):這個(gè)是Java標(biāo)準(zhǔn)的判斷相等的函數(shù),之所以要求用戶實(shí)現(xiàn)這個(gè)函數(shù),是因?yàn)镾park內(nèi)部會比較兩個(gè)RDD的分區(qū)是否一樣。設(shè)置數(shù)據(jù)分區(qū)自定義一個(gè)分區(qū)器MyPartition,要求根據(jù)鍵的奇偶性將數(shù)據(jù)分布在兩個(gè)分區(qū)中設(shè)置數(shù)據(jù)分區(qū)讀取HDFS的數(shù)據(jù)user.txt,并將第一個(gè)值作為鍵,數(shù)據(jù)如右圖。對RDD進(jìn)行分區(qū),設(shè)置分區(qū)方式為自定義的分區(qū)器MyPartition,并將結(jié)果保存到HDFS,代碼如左圖。設(shè)置數(shù)據(jù)分區(qū)對HelloWorld工程進(jìn)行重新編譯選擇菜單欄中的“Build”→“BuildArtifacts”

選項(xiàng)選擇“Rebuild”重新編譯工程,生成JAR包word.jar將JAR包提交到Linux的/opt目錄下后在Spark安裝包的/bin目錄下通過spark-submit命令運(yùn)行程序設(shè)置數(shù)據(jù)分區(qū)自定義分區(qū)運(yùn)行結(jié)果設(shè)置數(shù)據(jù)分區(qū)coalesce(numPartitions:Int,shuffle:Boolean=false)該函數(shù)用于將RDD進(jìn)行重分區(qū),使用HashPartitioner分區(qū)方式。第一個(gè)參數(shù)為重分區(qū)的數(shù)目;第二個(gè)為是否進(jìn)行shuffle,默認(rèn)為false。shuffle為false時(shí),重設(shè)分區(qū)個(gè)數(shù)只能比RDD原有分區(qū)數(shù)小,如果要重設(shè)的分區(qū)個(gè)數(shù)大于RDD原有的分區(qū)數(shù)目,RDD的分區(qū)數(shù)將不變?nèi)绻鹲huffle為true時(shí),重設(shè)的分區(qū)數(shù)不管比原有的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論