版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
Scala安裝與配置主講:李強任務(wù)描述因為Spark底層是使用Scala語言開發(fā)的,所以安裝與配置Scala的環(huán)境是我們在開始學習Spark之前要完成的準備工作。任務(wù)分析安裝Spark與Scala是要嚴格遵守兩者的版本對應(yīng)關(guān)系的,如果版本不對應(yīng)會在之后的使用中出現(xiàn)許多問題。在安裝之前,可以在Spark官網(wǎng)中查到對應(yīng)的Scala版本號,如Spark2.0+版本使用配套的是Scala2.11;Spark3.0+版本需要配套的是Scala2.12。綜上,本項目使用Spark3.2.1和Scala2.12.10。10.1.1在master節(jié)點安裝Scala1.解壓安裝文件如上所述本手冊所使用的版本是Scala2.12.10,可以從Scala官網(wǎng)下載。下載好的安裝包都需上傳到指定目錄下,本手冊指定為/root/目錄,使用ls命令可以查看上傳的安裝包(具體上傳方式請參考項目1),如圖10-1所示。使用tar命令解壓Scala到/usr/local/src文件夾,并切換到安裝目錄下查看,可以使用ls查看解壓后的效果,如代碼10-1所示,效果如圖10-2所示。代碼10-1解壓安裝包cd/root/tar-zxfscala-2.12.10.tgz-C/usr/local/src/cd/usr/local/src/ls圖10-1查看安裝包圖10-2查看解壓好的安裝包2.修改文件夾名稱由于解壓后的文件夾名稱帶有比較復(fù)雜的版本號,為了簡化后續(xù)配置,此處修改文件夾名稱。使用mv命令將解壓的scala-2.12.10目錄重命名為scala,如代碼10-2所示,效果如圖10-3所示。代碼10-2重命名文件夾cd/usr/local/src/mvscala-2.12.10scalals圖10-3重命名文件夾3.修改環(huán)境變量文件為了可以在任何目錄下直接執(zhí)行Scala的相關(guān)命令,可以在環(huán)境變量文件中添加Scala的環(huán)境變量。參考項目2,使用“vi/root/.bash_profile”編輯環(huán)境變量文件,將如表10-1所示的配置信息添加到/root/.bash_profile文件的末尾,保存退出。#setscalaenvironmentexportSCALA_HOME=/usr/local/src/scalaexportPATH=$PATH:$SCALA_HOME/bin表10-1環(huán)境變量文件的添加內(nèi)容4.生效用戶環(huán)境變量文件在master節(jié)點上運行如代碼10-3所示的命令,使master節(jié)點上配置的Scala的環(huán)境變量生效。代碼10-3master節(jié)點生效環(huán)境變量source/root/.bash_profile10.1.2在Slave節(jié)點安裝Scala1.同步配置文件到Slave節(jié)點將master上安裝好的scala文件夾內(nèi)容和配置好的環(huán)境變量文件分別分發(fā)到slave1和slave2節(jié)點,分發(fā)命令,如代碼10-4所示。代碼10-4分發(fā)Scala安裝至Slavescp-r/usr/local/src/scalaslave1:/usr/local/src/scp-r/usr/local/src/scalaslave2:/usr/local/src/scp/root/.bash_profileslave1:/root/scp/root/.bash_profileslave2:/root/2.生效用戶環(huán)境變量文件在兩個Slave節(jié)點上運行如代碼10-5所示的命令,使每個節(jié)點上配置的Scala的環(huán)境變量生效。代碼10-5Slave節(jié)點生效環(huán)境變量source/root/.bash_profile10.1.3測試Scala安裝情況1.測試Scala安裝版本可以在集群所有節(jié)點使用代碼10-6所示的代碼測試下Scala安裝的版本,在slave1上運行的效果如圖10-4所示,說明slave1上成功安裝了scala2.12.10,其他節(jié)點類似。代碼10-6測試Scala安裝版本scala-version圖10-4Scala安裝版本圖2.進入ScalaShell可以在集群所有節(jié)點啟動ScalaShell,并在Scala中設(shè)置一個String類型的字符串,賦值為“Helloworld!”,然后可以使用“:quit”退出ScalaShell,如代碼10-7所示,在master上運行的效果如圖10-5所示,其他節(jié)點類似。代碼10-7測試ScalaShell使用scalascala>valstring="Helloworld!"scala>:quit圖10-5ScalaShell效果圖謝謝Spark安裝與配置主講:李強任務(wù)描述該任務(wù)需要在Hadoop集群中所有節(jié)點安裝與配置Spark組件,并通過一個實例程序調(diào)用Spark集群進行測試。任務(wù)分析Spark部署方式有三種:Mesos模式、Standalone模式和YARN模式。由于在生產(chǎn)環(huán)境中,很多時候都要與Hadoop使用同一個集群,因此采用YARN來管理資源調(diào)度,可以提高資源利用率,所以本手冊將Spark配置為YARN模式,也被稱為SparkonYARN模式,即將Spark作為一個客戶端,將作業(yè)提交給YARN服務(wù)。10.2.1在master節(jié)點安裝Spark1.解壓安裝文件本手冊所使用的版本是Spark3.2.1,可以從Spark官網(wǎng)下載。下載好的安裝包都需上傳到指定目錄下,本手冊指定為/root/目錄,使用ls命令可以查看上傳的安裝包(具體上傳方式請參考項目1),如圖10-6所示。使用tar命令解壓Spark到/usr/local/src文件夾,并切換到安裝目錄下查看,可以使用ls查看解壓后的效果,如代碼10-8所示,效果如圖10-7所示。代碼10-8解壓安裝包cd/root/tar-zxfspark-3.2.1-bin-hadoop2.7.tgz-C/usr/local/src/cd/usr/local/src/ls圖10-6查看安裝包圖10-7查看解壓好的安裝包2.修改文件夾名稱由于解壓后的文件夾名稱帶有比較復(fù)雜的版本號,為了簡化后續(xù)配置,此處修改文件夾名稱。使用mv命令將解壓的spark-3.2.1-bin-hadoop2.7目錄重命名為spark,如代碼10-9所示,效果如圖10-8所示。代碼10-9重命名文件夾cd/usr/local/src/mvspark-3.2.1-bin-hadoop2.7sparkls圖10-8重命名文件夾3.修改環(huán)境變量文件為了可以在任何目錄下直接執(zhí)行Spark的相關(guān)命令,可以在環(huán)境變量文件中添加Spark的環(huán)境變量。參考項目2,使用“vi/root/.bash_profile”編輯環(huán)境變量文件,將如表10-2所示的配置信息添加到/root/.bash_profile文件的末尾,保存退出。#setSparkenvironmentexportSPARK_HOME=/usr/local/src/sparkexportPATH=$PATH:$SPARK_HOME/bin:$PATH表10-2環(huán)境變量文件的添加內(nèi)容4.生效用戶環(huán)境變量文件在master節(jié)點上運行如代碼10-10所示的命令,使master節(jié)點上配置的Spark的環(huán)境變量生效。代碼10-10master節(jié)點生效環(huán)境變量source/root/.bash_profile10.2.2修改Spark配置文件1.修改spark-env.sh配置文件spark-env.sh是Spark組件的核心配置文件,首先配置Spark執(zhí)行加載Hadoop、Java的環(huán)境變量,再設(shè)置集群中主節(jié)點的IP地址或名稱,同時還需要設(shè)置Spark運行時的其他的設(shè)置,spark-env.sh文件在文件夾中是模板文件,需要先從模板文件復(fù)制為spark-env.sh再修改文件內(nèi)容,如代碼10-11所示。代碼10-11修改vspark-env.sh文件cd/usr/local/src/spark/confcpspark-env.sh.templatespark-env.shvispark-env.shJAVA_HOME=/usr/local/src/javaHADOOP_CONF_DIR=/usr/local/src/hadoop/etc/hadoopSPARK_MASTER_IP=masterSPARK_MASTER_WEBUI_PORT=8085SPARK_MASTER_PORT=7077SPARK_WORKER_MEMORY=512mSPARK_WORKER_CORES=1SPARK_EXECUTOR_MEMORY=512mSPARK_EXECUTOR_CORES=1SPARK_WORKER_INSTANCES=1表10-3spark-env.sh文件的添加內(nèi)容2.修改workers配置文件workers是Spark3.x集群中從節(jié)點的設(shè)置文件(Spark2.0的配置文件為slaves),該文件在文件夾中是模板文件,需要先從模板文件復(fù)制為workers再修改文件內(nèi)容,如代碼10-12所示。代碼10-12Spark的workers文件修改cd/usr/local/src/spark/confcpworkers.templateworkersviworkersslave1slave2表10-4Spark的workers文件的添加內(nèi)容打開該文件后,首先刪除其中的“l(fā)ocalhost”,再添加實際的集群中的從節(jié)點名稱,如表
10-4所示的內(nèi)容添加到workers文件的末尾,保存退出。10.2.3在Slave節(jié)點安裝Spark1.同步配置文件到Slave節(jié)點將master上安裝配置好的Spark文件夾內(nèi)容和配置好的環(huán)境變量文件分別分發(fā)到slave1和slave2節(jié)點,分發(fā)命令,如代碼10-13所示。代碼10-13分發(fā)spark配置到Slave節(jié)點scp-r/usr/local/src/spark/root@slave1:/usr/local/src/scp-r/usr/local/src/spark/root@slave2:/usr/local/src/scp/root/.bash_profileslave1:/root/scp/root/.bash_profileslave2:/root/2.生效用戶環(huán)境變量文件在每個Slave節(jié)點上運行如代碼10-14所示的命令,使每個節(jié)點上配置的Spark的環(huán)境變量生效。代碼10-14Slave節(jié)點生效spark環(huán)境變量source/root/.bash_profile10.2.4運行Spark集群1.啟動Hadoop集群在master節(jié)點使用代碼10-15的啟動命令一鍵啟動Hadoop集群。代碼10-15啟動Hadoop集群start-all.sh2.以集群模式運行SparkPi實例程序可以使用spark-submit命令執(zhí)行Spark自帶的實例程序來測試Spark集群配置的情況,該命令的幾個參數(shù)說明如下。(1)--class:主函數(shù)所在的類,此處為“org.apache.spark.examples.SparkPi”;(2)--master:master的地址,此處為“yarn”;(3)--deploy-mode:部署Driver是Client模式或Cluster模式,此處為Client的模式;(4)--driver-memory:Driver使用的內(nèi)存,不可超過單機的總內(nèi)存,此處計算小,此處采用512MB;(5)--executor-memory:各個Executor使用的最大內(nèi)存,不可以超過單機的最大可使用內(nèi)存,此處計算小,采用512MB;(6)--executor-cores:各個Executor使用的并發(fā)線程數(shù)目,此處計算小,采用1個;(7)application-jar:Jar包的路徑,此處為“/usr/local/src/spark/examples/jars/spark-examples_2.12-3.2.1.jar”。使用如代碼10-16所示的代碼運行,在master上運行的效果如圖10-9所示,成功計算結(jié)果在最后輸出結(jié)果往上翻15條左右輸出記錄中。2.以集群模式運行SparkPi實例程序代碼10-16運行spark實例程序cd/usr/local/src/spark/examples/jars/spark-submit--classorg.apache.spark.examples.SparkPi--masteryarn\--deploy-modeclient--driver-memory512M--executor-memory512M\--executor-cores1spark-examples_2.12-3.2.1.jar圖10-9實例程序運行結(jié)果3.常見錯誤解決如果程序執(zhí)行出錯,請移到第一次出現(xiàn)錯誤的地方,檢查錯誤提示是否為“cluster.YarnClientSchedulerBackend:YarnapplicationhasalreadyexitedwithstateFINISHED!”如果錯誤提示為以上關(guān)鍵信息,一般是因為JDK版本是1.8,常常會出現(xiàn)這個問題,請嘗試以下解決方案再次測試。(1)關(guān)閉集群。執(zhí)行“stop-all.sh”命令關(guān)閉Hadoop集群。(2)修改yarn-site.xml文件。執(zhí)行“vi/usr/local/src/hadoop/etc/hadoop/yarn-site.xml”命令編輯yarn-site.xml文件,在Hadoop中yarn-site.xml的配置項中添加內(nèi)容,如表10-5所示。<property><name>yarn.nodemanager.pmem-check-enabled</name><value>false</value></property><property><name>yarn.nodemanager.vmem-check-enabled</name><value>false</value></property>表10-5yarn-site.xml修改謝謝Spark-shell應(yīng)用舉例主講:李強任務(wù)描述spark-shell是Spark自帶的交互式Shell程序,方便用戶進行交互式編程,可以在Spark命令行下用Scala編寫Spark程序。在該任務(wù)中,我們將學習如何啟動與關(guān)閉spark-shell,并通過一個單詞統(tǒng)計程序?qū)W習如何調(diào)用Spark的Actions與Transformations中常用方法。任務(wù)分析前面安裝部署的SparkonYARN模式,所以本任務(wù)是在YARN集群管理器上運行spark-shell。運行過程中也可以在sourceManager的Web頁面上查看Spark運行的情況。讀者可以核實下spark-env.sh配置文件中是否有配置HADOOP_CONF_DIR,如果沒有的話,請讀者自行添加“exportHADOOP_CONF_DIR=Hadoop”的配置文件目錄。10.3.1上傳數(shù)據(jù)文件1.準備測試數(shù)據(jù)文件任務(wù)10.3擬計劃完成一個單詞統(tǒng)計的Spark程序,所以需要事先準備好測試用的數(shù)據(jù)文件。使用如代碼10-18所示的命令在master節(jié)點的/home/目錄下創(chuàng)建一個spark_test_data.txt文件,文件內(nèi)容參考如表10-6所示,具體內(nèi)容讀者可以自行設(shè)計,然后保存退出。代碼10-18編輯數(shù)據(jù)文件vi/home/spark_test_data.txtGoodmorning!HelloHowareyou?HelloMynameisMary.HelloWorld!Howareyou?Goodmorning!HelloHello表10-6文件的添加內(nèi)容2.上傳測試數(shù)據(jù)文件至HDFS在master節(jié)點使用如代碼10-19所示的命令將/home/spark_test_data.txt文件上傳到HDFS系統(tǒng)的/input中,并查看下/input下的文件以確保上傳成功,效果如圖10-10所示。代碼10-19編輯數(shù)據(jù)文件hdfsdfs-put/home/spark_test_data.txt/input#上傳該文件到HDFS目錄下hdfsdfs-ls/input#查看hdfs目錄下的文件圖10-10上傳文件效果圖10.3.2運行spark-shell單詞統(tǒng)計程序1.運行spark-shell集群模式在master上執(zhí)行中代碼10-20的命令,在YARN集群管理器上使用spark-shell命令運行,該命令的幾個參數(shù)說明如下。(1)--master:master的地址,此處為“yarn”;(2)--deploy-mode:部署Driver是Client模式或Cluster模式,此處為Client的模式;(3)--executor-memory:各個Executor使用的最大內(nèi)存,
不可以超過單機的最大可使用內(nèi)存,
此處計算小,用1GB。代碼10-20運行的效果如圖10-11所示。接下來可以在這里進行spark-shell交互了。如果要退出SparkShell,輸入“:q”再按Enter鍵即可退出。代碼10-20運行spark-shellspark-shell--masteryarn--deploy-modeclient--executor-memory1G圖10-11spark-shell運行效果圖2.加載文件新建一個RDDSparkContext是通往Spark集群的唯一入口,每一個Spark應(yīng)用都是一個SparkContext實例,可以理解為一個SparkContext就是一個SparkApplication的生命周期,一旦SparkContext創(chuàng)建之后,即可使用這個SparkContext來創(chuàng)建RDD、累加器、廣播變量,并且可以通過SparkContext訪問Spark的服務(wù),運行任務(wù)。Spark-Shell中已經(jīng)默認將SparkContext類初始化為對象sc,代碼如果需要用到該對象,則直接應(yīng)用sc即可。使用sc的textFile的方法讀取HDFS中的/input/spark_test_data.txt數(shù)據(jù)文件并返回一個RDD對象,如代碼10-21所示,如果參數(shù)為路徑,則表示讀取該路徑下所有的文件內(nèi)容;如果參數(shù)為路徑文件,則表示讀取該文件內(nèi)容,將每一行作為為一條記錄,結(jié)果如圖10-12所示。代碼10-21文件的添加內(nèi)容valtextFile=sc.textFile("/input/spark_test_data.txt")圖10-12生成的RDD對象3.RDD進行Actions操作SparkRDD支持兩種類型的操作:Actions(行動)和Transformations(轉(zhuǎn)換)。RDD對象通過Actions操作來計算RDD中的記錄,常用的Actions操作如表10-7所示。通過Actions操作中的first()和count()來了解學習RDD算子操作,執(zhí)行代碼10-22的代碼,效果如圖10-13所示。從圖10-13中可以看出,RDD對象的第一條記錄是數(shù)據(jù)文件中的第一行內(nèi)容“Goodmorning!”,RDD對象的記錄條數(shù)為數(shù)據(jù)文件的行數(shù)10。代碼10-22RDD的Actions操作textFile.first()textFile.count()表10-7RDD常用Actions操作操作功能描述count()返回數(shù)據(jù)集中的元素個數(shù)collect()以數(shù)組的形式返回數(shù)據(jù)集中的所有元素first()返回數(shù)據(jù)集中的第一個元素take(n)以數(shù)組的形式返回數(shù)據(jù)集中的前n個元素reduce(func)通過函數(shù)func聚合數(shù)據(jù)集中的元素foreach(func)將數(shù)據(jù)集中的每個元素傳遞到函數(shù)func中運行圖10-13RDD的行動操作4.RDD進行Transformations操作Transformations是RDD的基本轉(zhuǎn)換操作,主要方法有map、filter、flatMap、groupByKey等,由于本手冊重點在于環(huán)境部署,本小節(jié)僅使用flatMap方法體驗一下。flatMap方法的參數(shù)說明如下。(1)textFile:上面數(shù)據(jù)文件返回的RDD對象;(2)flatMap:對文件中的每一行數(shù)據(jù)進行壓平切分,代碼10-23按照“,”分隔;(3)map:對出現(xiàn)的每一個單詞記為1,(word,1);(4)reduceByKey:對相同的單詞出現(xiàn)的次數(shù)進行累加。4.RDD進行Transformations操作flatMap方法返回一個新的RDD對象,這里命名為wt,繼續(xù)使用wt的collect()方法將遠程數(shù)據(jù)通過網(wǎng)絡(luò)傳輸?shù)奖镜剡M行詞頻統(tǒng)計;collect()方法得到的結(jié)果是一個list列表,然后可以通過foreach()方法遍歷list中的每一個元組數(shù)據(jù)并返回其結(jié)果,如代碼10-23所示。代碼10-23RDD的轉(zhuǎn)換操作valwt=textFile.flatMap(line=>line.split(",")).map(word=>(word,1)).reduceByKey(_+_)wt.collect()wt.collect().foreach(println)圖10-14RDD的轉(zhuǎn)換操作謝謝超市客戶聚類分析主講:李強任務(wù)描述在現(xiàn)代市場經(jīng)濟中,由于現(xiàn)代企業(yè)資源的有限性和消費需求的多樣性,對客戶進行必要的分類是非常重要的,這關(guān)系到未來營銷戰(zhàn)略的成敗。目前很多大中型企業(yè)已經(jīng)意識到了客戶分類的重要性,開始尋求大數(shù)據(jù)的相關(guān)方法來解決客戶分類問題。因為客戶的需求具有異質(zhì)性,即不是所有客戶的需求都相同。由于客戶需求、欲望及購買行為是多元的,所以客戶需求滿足呈現(xiàn)差異。對客戶進行細分,可以讓市場營銷、銷售人員以及企業(yè)的決策層從一個比較高的層次來觀察客戶信息數(shù)據(jù)倉庫中的客戶信息,使得企業(yè)可以針對不同類型的客戶采用相應(yīng)的營銷策略,使企業(yè)市場營銷服務(wù)活動的目標性和有效性得到提高,從而相對降低營銷成本,最大限度的開發(fā)和維護客戶資源,使企業(yè)的長期利潤和持續(xù)發(fā)展得到保證。本任務(wù)將運用SparkSQL對超市客戶數(shù)據(jù)進行探索分析,同時使用SparkMLlib提供的K-means算法構(gòu)建聚類模型,最終實現(xiàn)對超市客戶的聚類。任務(wù)分析超市客戶的聚類分析的實現(xiàn)步驟如下。(1)Scala插件安裝,包括在線安裝與離線安裝介紹。(2)配置Spark運行環(huán)境。(3)對超市客戶數(shù)據(jù)進行數(shù)據(jù)探索,包括性別分布統(tǒng)計、年齡分布統(tǒng)計,然后對數(shù)據(jù)進行特征構(gòu)建,包括構(gòu)建年收入等級特征、構(gòu)建消費等級特征。(4)將構(gòu)建好特征的數(shù)據(jù)保存至Hive數(shù)據(jù)庫中。(5)使用K-means算法構(gòu)建聚類模型,實現(xiàn)對超市客戶的聚類。10.4.1Scala插件安裝1.在線安裝Scala插件在線安裝Scala插件的操作步驟如下。(1)打開IntelliJIDEA,單擊界面右下角的“Configure”下拉列表,選擇“Plugins”選項,如圖10-15所示。(2)彈出“Plugins”對話框,如圖10-16所示,直接單擊“Scala”下方的“Install”按鈕下載Scala插件即可。圖10-16Plugins對話框圖10-15Plugins安裝1.在線安裝Scala插件(3)下載完成后,單擊“RestartIDE”按鈕重啟IDEA,如圖10-17所示。圖10-17Scala插件在線安裝2.離線安裝Scala插使用離線安裝的方式安裝Scala插件時,Scala插件需要提前下載至本機計算機中。本書的IntelliJIDEA版本使用的Scala插件為“scala-intellij-bin-2018.3.6.zip”,可從IDEA官網(wǎng)下載。離線安裝Scala插件的操作步驟如下。(1)在圖10-16所示的“Plugins”對話框中,單擊圖標,在下拉列表中選擇“InstallPluginfromDisk...”選項,彈出圖10-18所示的界面,選擇Scala插件所在路徑,單擊“OK”按鈕進行安裝。圖10-18Scala插件離線安裝圖10-19Scala插件安裝完成10.4.2配置Spark運行環(huán)境1.創(chuàng)建Maven工程(1)參考項目2,創(chuàng)建名稱定義為“MallCustomer_K”的Maven工程,MallCustomer_K工程頁面如圖10-20所示。(2)選擇菜單欄中的“File”→“ProjectStructure”選項,打開圖10-21所示的界面。也可以使用“Ctrl+Alt+Shift+S”快捷鍵打開。圖10-20MallCustomer_K工程頁面圖10-21工程結(jié)構(gòu)1.創(chuàng)建Maven工程(3)打開圖10-21所示的工程結(jié)構(gòu)配置界面后,選擇“Libraries”選項,單擊“+”按鈕,選擇“ScalaSDK”選項,在彈出的界面中選中2.12+版本的Scala插件單擊“OK”,如圖10-22所示,單擊“OK”按鈕即可將Scala插件加入到工程中。(4)將Hive安裝目錄下的/conf/hive-site.xml、Hadoop安裝目錄下的/etc/hadoop/core-site.xml和hdfs-site.xml下載、復(fù)制到resource文件夾中,如圖10-23所示。圖10-23添加配置文件圖10-22添加Scala插件2.添加Spark開發(fā)依賴包選擇菜單欄中的“File”→“ProjectStructure”選項,打開圖10-24所示的界面。也可以使用“Ctrl+Alt+Shift+S”快捷鍵打開。圖10-24工程結(jié)構(gòu)2.添加Spark開發(fā)依賴包打開圖10-24所示的工程結(jié)構(gòu)配置界面后,選擇“Libraries”選項,單擊“+”按鈕,選擇“Java”選項,在彈出的界面中找到Spark安裝目錄下的jars文件夾,將整個文件夾導(dǎo)入,如圖10-25所示,單擊“OK”按鈕即可將Spark開發(fā)依賴包加入到工程中。至此Spark的編程環(huán)境配置完成。圖10-25添加Spark開發(fā)依賴包10.4.3數(shù)據(jù)探索與特征構(gòu)建數(shù)據(jù)探索與特征構(gòu)建超市客戶數(shù)據(jù)集包含某超市通過會員卡獲得一些客戶的基本數(shù)據(jù),包括客戶ID、年齡、性別、年收入和消費分數(shù)。其中消費分數(shù)是根據(jù)定義的參數(shù)(例如客戶行為和購買數(shù)據(jù))分配給客戶的,字段說明如表10-8所示。讀取超市客戶數(shù)據(jù),并創(chuàng)建DataFrame。由于數(shù)據(jù)比較多,將數(shù)據(jù)集文件上傳至HDFS文件系統(tǒng)的/user/root目錄下,同時在Hive中創(chuàng)建名為“mall”的數(shù)據(jù)庫。如代碼10-24所示。本案例的完整流程都將在IDEA開發(fā)環(huán)境中通過編程實現(xiàn),具體步驟如下。表10-8數(shù)據(jù)集變量說明變量名變量說明變量類型及說明CustomerID客戶的唯一ID編碼IntGender客戶性別StringAge客戶年齡IntAnnualIncome客戶的年收入Int,單位(k$)SpendingScore消費分數(shù)Int,范圍(1-100)代碼10-24將數(shù)據(jù)上傳至HDFS//將數(shù)據(jù)上傳至HDFShdfsdfs-put/data/Mall_Customers.csv/user/root///在Hive中創(chuàng)建名為“mall”的數(shù)據(jù)庫createdatabasemall;數(shù)據(jù)探索與特征構(gòu)建(1)配置SparkSession并讀取數(shù)據(jù)右鍵單擊MallCustomer_K工程下的src/main/java文件夾,依次選擇“New”→“ScalaClass”選項,在包下新建一個Scala類,將Scala類的類名設(shè)置為“customerDataAnalyse”,并在“Kind”右側(cè)的下拉列表中選擇“Object”選項,單擊“OK”按鈕,完成Scala類的創(chuàng)建。配置SparkSession,從HDFS中讀取超市客戶數(shù)據(jù)為DataFrame,并查看DataFrame的前6行數(shù)據(jù),如代碼10-25所示,返回結(jié)果如圖10-26所示。代碼10-25配置SparkSession并讀取數(shù)據(jù)//配置SparkSessionvalspark=SparkSession.builder().master("local[*]").appName("customerDataAnalyse").enableHiveSupport().getOrCreate()spark.sparkContext.setLogLevel("WARN")//讀取超市客戶數(shù)據(jù)valdata=spark.read.option("header","true").option("inferSchema","true").option("delimiter",",").csv("hdfs://master:8020/user/root/Mall_Customers.csv")//查看DataFrame的前6行數(shù)據(jù)data.show(6,false)圖10-26查看前6行數(shù)據(jù)數(shù)據(jù)探索與特征構(gòu)建(2)性別分布統(tǒng)計由于男女性在對待購物這件事情上看法可能會有所差別,所以先查看不同性別的客戶人數(shù)以及占比情況,如代碼10-26所示,返回結(jié)果如圖10-27所示。代碼10-26性別分布統(tǒng)計importorg.apache.spark.sql.functions._println("性別分布統(tǒng)計,統(tǒng)計各性別人數(shù),計算占比情況:")data.groupBy("Gender").count().withColumn("GenderPercent",round(col("count")/data.count()*100,2)).show(false)圖10-27性別分布統(tǒng)計數(shù)據(jù)探索與特征構(gòu)建(3)年齡分布統(tǒng)計不同年齡的人在對待購物這件事情上的看法也可能有所差別,因此需要查看客戶年齡的分布情況,如代碼10-27所示,返回結(jié)果如圖10-28所示。代碼10-27年齡分布統(tǒng)計println("年齡分布統(tǒng)計,統(tǒng)計各年齡人數(shù),計算占比情況:")data.groupBy("Age").count().withColumn("AgePercent",round(col("count")/data.count(),2)).sort(desc("count")).show(false)圖10-28年齡分布統(tǒng)計數(shù)據(jù)探索與特征構(gòu)建(4)構(gòu)建年收入等級特征客戶的年收入水平同樣是一個顯著影響客戶消費的指標,根據(jù)客戶的年收入構(gòu)建年收入等級特征,作為新的一列保存至新的DataFrame中,并查看分布情況,如代碼10-28所示,返回結(jié)果如圖10-29所示。代碼10-28構(gòu)建年收入等級特征//年收入等級劃分,根據(jù)收入字段劃分并新建收入水平字段,//<35,35~56,56~77,77~98,>98,劃分為5個等級,并計算各等級數(shù)量和占比情況println("年收入等級劃分:")valnewdata1=data.withColumn("IncomeLevel",when(col("AnnualIncome(k$)")<35,1).when(col("AnnualIncome(k$)")>35andcol("AnnualIncome(k$)")<=56,2).when(col("AnnualIncome(k$)")>56andcol("AnnualIncome(k$)")<=77,3).when(col("AnnualIncome(k$)")>77andcol("AnnualIncome(k$)")<=98,4).when(col("AnnualIncome(k$)")>98,5).otherwise(6))newdata1.groupBy("IncomeLevel").count().withColumn("IncomeLevelPercent",round(col("count")/data.count()*100,2)).show()圖10-29年收入等級統(tǒng)計數(shù)據(jù)探索與特征構(gòu)建(5)構(gòu)建消費等級特征消費分數(shù)代表著客戶對于商城的貢獻和價值,也可以側(cè)面反映出客戶對于此商城的滿意程度。根據(jù)用戶的消費分數(shù)構(gòu)建客戶消費等級特征,將其作為新的一列保存至新的DataFrame中,并查看分布情況,如代碼10-29所示,返回結(jié)果如圖10-30所示。代碼10-29構(gòu)建消費等級特征//消費得分分布,根據(jù)消費字段新建消費水平等級字段,//<10,10~30,30~50,50~70,70~100,劃分為5個等級,并計算各個等級的數(shù)量和占比情況println("消費等級分布:")valnewdata2=newdata1.withColumn("SpendLevel",when(col("SpendingScore(1-100)")<=10,1).when(col("SpendingScore(1-100)")>10andcol("SpendingScore(1-100)")<=30,2).when(col("SpendingScore(1-100)")>30andcol("SpendingScore(1-100)")<=50,3).when(col("SpendingScore(1-100)")>50andcol("SpendingScore(1-100)")<=70,4).when(col("SpendingScore(1-100)")>70andcol("SpendingScore(1-100)")<=100,5))newdata2.groupBy("SpendLevel").count().withColumn(
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 斯美防務(wù)合作協(xié)議
- 2025年度個人商鋪出租信息發(fā)布合同2篇
- 2025版新能源發(fā)電線路建設(shè)項目合同書3篇
- 2025版文化遺址物業(yè)保護及轉(zhuǎn)讓合同范本匯編3篇
- 2025版外架班組勞務(wù)分包及技術(shù)創(chuàng)新合同3篇
- 2024年全國營養(yǎng)師技能大賽江蘇省賽考試題庫(附答案) (二)
- 2025年全球及中國漸變折射率多模光纖行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2024年教育公共基礎(chǔ)知識筆記
- 2025版新型環(huán)保砂石料生產(chǎn)及銷售合作協(xié)議3篇
- 2025年度個人私有房屋購買合同(家居定制服務(wù)版)3篇
- 垃圾處理廠工程施工組織設(shè)計
- 天皰瘡患者護理
- 機電一體化系統(tǒng)設(shè)計-第5章-特性分析
- 2025年高考物理復(fù)習壓軸題:電磁感應(yīng)綜合問題(原卷版)
- 雨棚鋼結(jié)構(gòu)施工組織設(shè)計正式版
- 2025年蛇年新年金蛇賀歲金蛇狂舞春添彩玉樹臨風福滿門模板
- 《建筑制圖及陰影透視(第2版)》課件 4-直線的投影
- 2024-2030年中國IVD(體外診斷)測試行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
- 碎紙機設(shè)計說明書
- 湖南省長沙市青竹湖湘一外國語學校2021-2022學年八年級下學期期中語文試題
- 2024年股權(quán)代持協(xié)議經(jīng)典版(3篇)
評論
0/150
提交評論