Linux系統與大數據應用 課件 第10章 大數據應用與案例_第1頁
Linux系統與大數據應用 課件 第10章 大數據應用與案例_第2頁
Linux系統與大數據應用 課件 第10章 大數據應用與案例_第3頁
Linux系統與大數據應用 課件 第10章 大數據應用與案例_第4頁
Linux系統與大數據應用 課件 第10章 大數據應用與案例_第5頁
已閱讀5頁,還剩48頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Linux系統與大數據應用10大數據應用與案例第章本章內容10.1Mahout數據挖掘10.2Hadoop應用案例:Worldcount詞頻統計案例10.3Spark應用案例:spark進行電商數據檢索10.4本章小結10.1Mahout數據挖掘ApacheMahout是一個開源項目,提供一些可擴展的機器學習領域經典算法的實現,旨在幫助開發人員更加方便快捷地創建智能應用程序。經典算法包括聚類、分類、協同過濾、進化編程等等,并且,在Mahout的最近版本中還加入了對ApacheHadoop的支持,使這些算法可以更高效的運行在云計算環境中。Mahout是一個很強大的數據挖掘工具,是一個分布式機器學習算法的集合,包括:被稱為Taste的分布式協同過濾的實現、分類、聚類等。Mahout最大的優點就是基于hadoop實現,把很多以前運行于單機上的算法,轉化為了MapReduce模式,這樣大大提升了算法可處理的數據量和處理性能。一、Mahout安裝1、下載Mahout/dist/mahout/2、解壓(如圖10-1)tar-zxvfmahout-distribution-0.9.tar.gz10.1.1Mahout安裝和配置10.1.1Mahout安裝和配置圖10-1解壓3、配置環境變量(1)配置Mahout環境變量(如圖10-2)#setmahoutenvironmentexportMAHOUT_HOME=/user/mahoutexportMAHOUT_CONF_DIR=$MAHOUT_HOME/confexportPATH=$MAHOUT_HOME/conf:$MAHOUT_HOME/bin:$PATH圖10-2Mahout環境變量10.1.1Mahout安裝和配置(2)配置Mahout所需的Hadoop環境變量#sethadoopenvironmentexportHADOOP_HOME=/user/hadoopexportHADOOP_CONF_DIR=$HADOOP_HOME/confexportPATH=$PATH:$HADOOP_HOME/binexportHADOOP_HOME_WARN_SUPPRESS=not_null下圖10-3,是在實例中的環境配置:圖10-3Hadoop環境變量10.1.1Mahout安裝和配置4、驗證運行mahout,如果出現以下結果說明配置正確。圖10-4驗證10.1.1Mahout安裝和配置10.1.2KMeans算法和canopy算法一、kMeans算法KMEANS算法是輸入聚類個數k,以及包含n個數據對象的數據庫,輸出滿足方差最小標準k個聚類的一種算法。k-means算法接受輸入量k;然后將n個數據對象劃分為k個聚類以便使得所獲得的聚類滿足:同一聚類中的對象相似度較高;而不同聚類中的對象相似度較小。1、處理流程(1)從n個數據對象任意選擇k個對象作為初始聚類中心;(2)根據每個聚類對象的均值(中心對象),計算每個對象與這些中心對象的距離;并根據最小距離重新對相應對象進行劃分;(3)重新計算每個(有變化)聚類的均值(中心對象);(4)計算標準測度函數,當滿足一定條件,如函數收斂時,則算法終止;如果條件不滿足則回到步驟(2)。10.1.2KMeans算法和canopy算法1、實現方法k-means算法接受輸入量k;然后將n個數據對象劃分為k個聚類以便使得所獲得的聚類滿足:同一聚類中的對象相似度較高;而不同聚類中的對象相似度較小。聚類相似度是利用各聚類中對象的均值所獲得一個“中心對象”(引力中心)來進行計算的。k-means算法的工作過程說明如下:首先從n個數據對象任意選擇k個對象作為初始聚類中心;而對于所剩下其它對象,則根據它們與這些聚類中心的相似度(距離),分別將它們分配給與其最相似的(聚類中心所代表的)聚類;然后再計算每個所獲新聚類的聚類中心(該聚類中所有對象的均值);不斷重復這一過程直到標準測度函數開始收斂為止。一般都采用均方差作為標準測度函數.k個聚類具有以下特點:各聚類本身盡可能的緊湊,而各聚類之間盡可能的分開。算法的時間復雜度上界為O(n*k*t),其中t是迭代次數。10.1.2KMeans算法和canopy算法k-means算法是一種基于樣本間相似性度量的間接聚類方法,屬于非監督學習方法。此算法以k為參數,把n個對象分為k個簇,以使簇內具有較高的相似度,而且簇間的相似度較低。相似度的計算根據一個簇中對象的平均值(被看作簇的重心)來進行。此算法首先隨機選擇k個對象,每個對象代表一個聚類的質心。對于其余的每一個對象,根據該對象與各聚類質心之間的距離,把它分配到與之最相似的聚類中。然后,計算每個聚類的新質心。重復上述過程,直到準則函數收斂。k-means算法是一種較典型的逐點修改迭代的動態聚類算法,其要點是以誤差平方和為準則函數。逐點修改類中心:一個象元樣本按某一原則,歸屬于某一組類后,就要重新計算這個組類的均值,并且以新的均值作為凝聚中心點進行下一次象元素聚類;逐批修改類中心:在全部象元樣本按某一組的類中心分類之后,再計算修改各類的均值,作為下一次分類的凝聚中心點。10.1.2KMeans算法和canopy算法openSUSE項目是由Novell發起的開源社區計劃。旨在推進Linux的廣泛使用,提供了自由簡單的方法來獲得世界上最好用的Linux發行版之一openSUSE。openSUSE項目為Linux開發者和愛好者提供了開始使用Linux所需要的一切。該項目由SUSE等公司贊助,2011年Attachmate集團收購了Novell,并把Novell和SUSE做為兩個獨立的子公司運營。openSUSE操作系統和相關的開源程序會被SUSELinuxEnterprise(比如SLES和SLED)使用。openSUSE對個人來說是完全免費的,包括使用和在線更新。外文名稱:openSUSE發起人

:Novell目標

:推進Linux的廣泛使用類別

:開源社區項目openSUSE是一個一般用途的基于Linux內核的GNU/Linux操作系統,由openSUSE項目社區開發維護,該項目由SUSE等公司贊助。在2004年2月Novell收購SUSELinux之后,Novell決定以100%開源產品發布SUSELinux專業版,并作為一個開源項目,openSUSE繼承與SUSELinuxProfessional。2011年Attachmate集團收購了Novell,并把Novell和SUSE做為兩個獨立的子公司運營。SUSE提供基于openSUSE的企業級產品SUSELinuxEnterprise。openSUSE項目除了提供一個發行版,還包括一個OpenBuildService,openSUSE的目的是提供提供一個穩定的基礎并讓用戶通過OpenBuildService得到額外的更多更新的軟件,甚至是一個滾動發行的版本命為Tumbleweed。系統默認KDE作為圖形環境,當然GNOME也是很不錯的,其他也有Xfce、LXDE等圖形環境。openSUSE是著名Novell公司旗下的Linux的發行版,發行量在歐洲占第一位。它采用的KDE4.3作為默認桌面環境,同時也提供GNOME桌面版本。它的軟件包管理系統采用自主開發的YaST,頗受好評。他的用戶界面非常華麗,甚至超越windows7,而且性能良好,最新版本是13.2。10.1.2KMeans算法和canopy算法二、canopy算法CanopyClustering這個算法是2000年提出來的,此后與Hadoop配合,已經成為一個比較流行的算法了。確切的說,這個算法獲得的并不是最終結果,它是為其他算法服務的,比如k-means算法。它能有效地降低k-means算法中計算點之間距離的復雜度。Mahout中已經實現了這個算法。首先為大家解釋一下canopy算法,下圖很好得展示了Canopy聚類的過程。(圖10-)圖10-5canopy算法聚類過程10.1.2KMeans算法和canopy算法圖中有一個T1,一個T2,我們稱之為距離閥值,顯然T1>T2,這兩個值有什么用呢?我們先確定了一個中心,然后計算其他點到這個中心間的距離,當距離大于T1時,小于T1大于T2時,小于T2時,對這個點的處理都是不一樣的。10.1.3貝葉斯算法學過概率理論的人都知道條件概率的公式:P(AB)=P(A)P(B|A)=P(B)P(A|B);即事件A和事件B同時發生的概率等于在發生A的條件下B發生的概率乘以A的概率。由條件概率公式推導出貝葉斯公式:P(B|A)=P(A|B)P(B)/P(A);即,已知P(A|B),P(A)和P(B)可以計算出P(B|A)。假設B是由相互獨立的事件組成的概率空間{B1,b2,...bn}。則P(A)可以用全概率公式展開:P(A)=P(A|B1)P(B1)+P(A|B2)P(B2)+..P(A|Bn)P(Bn)。貝葉斯公式表示成:P(Bi|A)=P(A|Bi)P(Bi)/(P(A|B1)P(B1)+P(A|B2)P(B2)+..P(A|Bn)P(Bn));常常把P(Bi|A)稱作后驗概率,而P(A|Bn)P(Bn)為先驗概率。而P(Bi)又叫做基礎概率。貝葉斯公式:圖10-6貝葉斯公式10.1.3貝葉斯算法貝葉斯公式看起來很簡單,但是在自然科學領域應用范圍及其廣泛。同時理論本身蘊含了深刻的思想。一.貝葉斯概率的歷史貝葉斯理論和貝葉斯概率以托馬斯?貝葉斯(1702-1761)命名,他證明了現在稱為貝葉斯定理的一個特例。術語貝葉斯卻是在1950年左右開始使用,很難說貝葉斯本人是否會支持這個以他命名的概率非常廣義的解釋。拉普拉斯證明了貝葉斯定理的一個更普遍的版本,并將之用于解決天體力學、醫學統計中的問題,在有些情況下,甚至用于法理學。但是拉普拉斯并不認為該定理對于概率論很重要。他還是堅持使用了概率的經典解釋。弗蘭克?普倫普頓?拉姆齊在《數學基礎》(1931年)中首次建議將主觀置信度作為概率的一種解釋。Ramsey視這種解釋為概率的頻率解釋的一個補充,而頻率解釋在當時更為廣泛接受。統計學家BrunodeFinetti于1937年采納了Ramsey的觀點,將之作為概率的頻率解釋的一種可能的代替。L.J.Savage在《統計學基礎》(1954年)中拓展了這個思想。有人試圖將“置信度”的直觀概念進行形式化的定義和應用。最普通的應用是基于打賭:置信度反映在行為主體愿意在命題上下注的意愿上。當信任有程度的時候,概率計算的定理測量信任的理性程度,就像一階邏輯的定理測量信任的理性程度一樣。很多人將置信度視為經典的真值(真或假)的一種擴展。HaroldJeffreys,RichardT.Cox,EdwinJaynes和I.J.Good研探了貝葉斯理論。其他著名貝葉斯理論的支持者包括JohnMaynardKeynes和B.O.Koopman。10.1.3貝葉斯算法二貝葉斯法則的原理通常,事件A在事件B(發生)的條件下的概率,與事件B在事件A的條件下的概率是不一樣的;然而,這兩者是有確定的關系,貝葉斯法則就是這種關系的陳述。作為一個規范的原理,貝葉斯法則對于所有概率的解釋是有效的;然而,頻率主義者和貝葉斯主義者對于在應用中概率如何被賦值有著不同的看法:頻率主義者根據隨機事件發生的頻率,或者總體樣本里面的個數來賦值概率;貝葉斯主義者要根據未知的命題來賦值概率。一個結果就是,貝葉斯主義者有更多的機會使用貝葉斯法則。貝葉斯法則是關于隨機事件A和B的條件概率和邊緣概率的。bayes&其中L(A|B)是在B發生的情況下A發生的可能性。10.1.3貝葉斯算法在貝葉斯法則中,每個名詞都有約定俗成的名稱:Pr(A)是A的先驗概率或邊緣概率。之所以稱為"先驗"是因為它不考慮任何B方面的因素。Pr(A|B)是已知B發生后A的條件概率,也由于得自B的取值而被稱作A的后驗概率。Pr(B|A)是已知A發生后B的條件概率,也由于得自A的取值而被稱作B的后驗概率。Pr(B)是B的先驗概率或邊緣概率,也作標準化常量(normalizedconstant)。按這些術語,Bayes法則可表述為:后驗概率=(似然度*先驗概率)/標準化常量也就是說,后驗概率與先驗概率和似然度的乘積成正比。10.1.3貝葉斯算法另外,比例Pr(B|A)/Pr(B)也有時被稱作標準似然度(standardisedlikelihood),Bayes法則可表述為:后驗概率=標準似然度*先驗概率要理解貝葉斯推斷,必須先理解貝葉斯定理。后者實際上就是計算"條件概率"的公式。所謂"條件概率"(Conditionalprobability),就是指在事件B發生的情況下,事件A發生的概率,用P(A|B)來表示。圖10-7貝葉斯圖解10.1.3貝葉斯算法根據文氏圖,可以很清楚地看到在事件B發生的情況下,事件A發生的概率就是P(A∩B)除以P(B)。即:P(A|B)=P(A∩B)/P(B)同理可得,P(B|A)=P(A∩B)/P(A)所以,

即P(A|B)=(P(B|A)*P(A))/P(B)10.1.3貝葉斯算法三.貝葉斯推斷的含義對條件概率公式進行變形,可以得到如下形式:P(A|B)=P(A)*P(B|A)/P(B)我們把P(A)稱為"先驗概率"(Priorprobability),即在B事件發生之前,我們對A事件概率的一個判斷。P(A|B)稱為"后驗概率"(Posteriorprobability),即在B事件發生之后,我們對A事件概率的重新評估。P(B|A)/P(B)稱為"可能性函數"(Likelyhood),這是一個調整因子,使得預估概率更接近真實概率。所以,條件概率可以理解成下面的式子:后驗概率=先驗概率x調整因子這就是貝葉斯推斷的含義。我們先預估一個"先驗概率",然后加入實驗結果,看這個實驗到底是增強還是削弱了"先驗概率",由此得到更接近事實的"后驗概率"。在這里,如果"可能性函數"P(B|A)/P(B)>1,意味著"先驗概率"被增強,事件A的發生的可能性變大;如果"可能性函數"=1,意味著B事件無助于判斷事件A的可能性;如果"可能性函數"<1,意味著"先驗概率"被削弱,事件A的可能性變小。10.2.1實訓目的和要求掌握Hadoop基本使用方法熟悉Ubuntu操作10.2.2運用單詞計數是最簡單也是最能體現MapReduce思想的程序之一,可以稱為MapReduce版"HelloWorld",該程序的完整代碼可以在Hadoop安裝包的"src/examples"目錄下找到。單詞計數主要完成功能是:統計一系列文本文件中每個單詞出現的次數,如下圖所示。圖10-8WC圖解10.2.2運用1.創建本地的示例數據文件:依次進入【Home】-【hadoop】-【hadoop-1.2.1】創建一個文件夾file用來存儲本地原始數據。圖10-9兩個文件10.2.2運用并在這個目錄下創建2個文件分別命名為【myTest1.txt】和【myTest2.txt】或者你想要的任何文件名。分別在這2個文件中輸入下列示例語句:圖10-10文件內容圖10-11文件內容10.2.2運用2.在HDFS上創建輸入文件夾呼出終端,輸入下面指令:bin/hadoopfs-mkdirhdfsInput執行這個命令時可能會提示類似安全的問題,如果提示了,請使用bin/hadoopdfsadmin-safemodeleave來退出安全模式。當分布式文件系統處于安全模式的情況下,文件系統中的內容不允許修改也不允許刪除,直到安全模式結束。安全模式主要是為了系統啟動的時候檢查各個DataNode上數據塊的有效性,同時根據策略必要的復制或者刪除部分數據塊。運行期通過命令也可以進入安全模式。意思是在HDFS遠程創建一個輸入目錄,我們以后的文件需要上載到這個目錄里面才能執行。10.2.2運用3.上傳本地file中文件到集群的hdfsInput目錄下在終端依次輸入下面指令:cdhadoop-1.2.1bin/hadoopfs-putfile/myTest*.txthdfsInput圖10-12過程10.2.2運用4.運行例子:在終端輸入下面指令:bin/hadoopjarhadoop-examples-1.2.1.jarwordcounthdfsInputhdfsOutputbin/hadoopjarhadoop-examples-*.jarwordcounthdfsInputhdfsOutput應該出現下面結果:(如圖10-13)10.2.2運用Hadoop命令會啟動一個JVM來運行這個MapReduce程序,并自動獲得Hadoop的配置,同時把類的路徑(及其依賴關系)加入到Hadoop的庫中。以上就是HadoopJob的運行記錄,從這里可以看到,這個Job被賦予了一個ID號:job_201202292213_0002,而且得知輸入文件有兩個(Totalinputpathstoprocess:2),同時還可以了解map的輸入輸出記錄(record數及字節數),以及reduce輸入輸出記錄。查看HDFS上hdfsOutput目錄內容:在終端輸入下面指令:bin/hadoopfs-lshdfsOutput在下圖10-14中是得到的結果:圖10-14生成的文件10.2.2運用從上圖中知道生成了三個文件,我們的結果在"part-r-00000"中。使用下面指令查看結果輸出文件內容bin/hadoopfs-catoutput/part-r-00000在下圖10-15中為分析結果圖10-15分析結果(注意:請忽視截圖指令中的3)輸出目錄日志以及輸入目錄中的文件是永久存在的,如果不刪除的話,如果出現結果不一致,請參考這個因素。10.3.1實訓目的和要求掌握簡單的spark編程熟悉rdd操作熟悉sparkSQl10.3.2運用1任務描述通過spark將本地的數據上傳至spark集群(這里為單節點)并存儲至數據庫中2任務要求(1)數據集來源淘寶雙11數據鏈接:/s/1kVl4flH密碼:b0ne圖10-16要讀取數據的截圖10.3.2運用(2)建立maven項目配置pom文件(3)程序中的數據庫需要改成自己對應的數據庫(4)在對應目錄下建立要讀取的文件3知識點提示(1)首先將讀取的數據放在rdd中,然后將rdd轉化為datafram,中間用Record類來封裝數據(object類不用實例化),最后通過datafram存入數據庫4操作步驟提示這里主要通過idea來實現一下為操作步驟:(1)首先確保已經安裝好scala和idea(2)配置好數據庫具體的字段參考程序中的類Record(3)建立maven項目,配置好pom依賴(4)建立Example類編譯運行程序10.3.2運用5實現的代碼importorg.apache.spark.sql.{SQLContext,SaveMode}importorg.apache.spark.{SparkConf,SparkContext}objectExample{defmain(args:Array[String]){valconf=newSparkConf().setAppName("sparksq").setMaster("local[2]")valsc=newSparkContext(conf)valsqlContext=newSQLContext(sc)valrdd=sc.textFile("/usr/sample")//將讀取的數據安空格鍵切分valresult=rdd.map(x=>{//根據逗號分隔符來切分valp=x.split(",")//將切分好的每個字段桶過樣例類來封裝Record(p(0),p(1),p(2),p(3),p(4),p(5),p(6),p(7),p(8),p(9),p(10))})10.3.2運用importsqlContext.implicits._//dataframe的隱式轉換將rdd轉化為dataframevaldataframe=result.toDF()//建立sparksql表adataframe.registerTempTable("a")//打印表結構dataframe.show()//查詢語句valsqlcommand="select*froma"valprop=newjava.util.Properties//設置數據庫用戶名及密碼prop.setProperty("user","root")prop.setProperty("password","Qwe123123")10.3.2運用//執行查詢語句并將結果寫入數據庫中sqlContext.sql(sqlcommand).write.mode(SaveMode.Append).jdbc("jdbc:mysql://localhost:3306/mysql","log3",prop)}}//創建樣例類caseclassRecord(user_id:String,item_id:String,cat_id:String,merchant_id:String,brand_id:String,month:String,day:String,action:String,age_range:String,gender:String,province:String)下雨10-17中是程序的運行結果:圖10-17程序運行結果10.3.2運用6相關知識1、RDD是什么RDD:Spark的核心概念是RDD,指的是一個只讀的,可分區的分布式數據集,這個數據集的全部或部分可以緩存在內存中,在多次計算間重用。為什么會產生RDD?(1)傳統的MapReduce雖然具有自動容錯、平衡負載和可拓展性的優點,但是其最大缺點是采用非循環式的數據流模型,使得在迭代計算式要進行大量的磁盤IO操作。RDD正是解決這一缺點的抽象方法。(2)RDD的具體描述RDD(彈性數據集)是Spark提供的最重要的抽象的概念,它是一種有容錯機制的特殊集合,可以分布在集群的節點上,以函數式編操作集合的方式,進行各種并行操作。可以將RDD理解為一個具有容錯機制的特殊集合,它提供了一種只讀、只能有已存在的RDD變換而來的共享內存,然后將所有數據都加載到內存中,方便進行多次重用。a.他是分布式的,可以分布在多臺機器上,進行計算。b.他是彈性的,計算過程中內錯不夠時它會和磁盤進行數據交換。10.3.2運用c.這些限制可以極大的降低自動容錯開銷d.實質是一種更為通用的迭代并行計算框架,用戶可以顯示的控制計算的中間結果,然后將其自由運用于之后的計算。(3)RDD的容錯機制實現分布式數據集容錯方法有兩種:數據檢查點和記錄更新RDD采用記錄更新的方式:記錄所有更新點的成本很高。所以,RDD只支持粗顆粒變換,即只記錄單個塊上執行的單個操作,然后創建某個RDD的變換序列(血統)存儲下來;變換序列指,每個RDD都包含了他是如何由其他RDD變換過來的以及如何重建某一塊數據的信息。因此RDD的容錯機制又稱“血統”容錯。要實現這種“血統”容錯機制,最大的難題就是如何表達父RDD和子RDD之間的依賴關系。實際上依賴關系可以分兩種,窄依賴和寬依賴:窄依賴:子RDD中的每個數據塊只依賴于父RDD中對應的有限個固定的數據塊;寬依賴:子RDD中的一個數據塊可以依賴于父RDD中的所有數據塊。10.3.2運用例如:map變換,子RDD中的數據塊只依賴于父RDD中對應的一個數據塊;groupByKey變換,子RDD中的數據塊會依賴于多有父RDD中的數據塊,因為一個key可能錯在于父RDD的任何一個數據塊中將依賴關系分類的兩個特性:第一,窄依賴可以在某個計算節點上直接通過計算父RDD的某塊數據計算得到子RDD對應的某塊數據;寬依賴則要等到父RDD所有數據都計算完成之后,并且父RDD的計算結果進行hash并傳到對應節點上之后才能計算子RDD。第二,數據丟失時,對于窄依賴只需要重新計算丟失的那一塊數據來恢復;對于寬依賴則要將祖先RDD中的所有數據塊全部重新計算來恢復。所以在長“血統”鏈特別是有寬依賴的時候,需要在適當的時機設置數據檢查點。也是這兩個特性要求對于不同依賴關系要采取不同的任務調度機制和容錯恢復機制。10.3.2運用2、RDD在Spark中的地位及作用(1)為什么會有Spark?因為傳統的并行計算模型無法有效的解決迭代計算(iterative)和交互式計算(interactive);而Spark的使命便是解決這兩個問題,這也是他存在的價值和理由。(2)Spark如何解決迭代計算?其主要實現思想就是RDD,把所有計算的數據保存在分布式的內存中。迭代計算通常情況下都是對同一個數據集做反復的迭代計算,數據在內存中將大大提升IO操作。這也是Spark涉及的核心:內存計算。(3)Spark如何實現交互式計算?因為Spark是用scala語言實現的,Spark和scala能夠緊密的集成,所以Spark可以完美的運用scala的解釋器,使得其中的scala可以向操作本地集合對象一樣輕松操作分布式數據集。(4)Spark和RDD的關系?可以理解為:RDD是一種具有容錯性基于內存的集群計算抽象方法,Spark則是這個抽象方法的實現。10.3.2運用3、如何操作RDD?(1)如何獲取RDDa.從共享的文件系統獲取,(如:HDFS)b.通過已存在的RDD轉換c.將已存在scala集合(只要是Seq對象)并行化,通過調用SparkContext的parallelize方法實現d.改變現有RDD的之久性;RDD是懶散,短暫的。(RDD的固化:cache緩存至內錯;save保存到分布式文件系統)(2)操作RDD的兩個動作a.Actions:對數據集計算后返回一個數值value給驅動程序;例如:Reduce將數據集的所有元素用某個函數聚合后,將最終結果返回給程序。b.Transformation:根據數據集創建一個新的數據集,計算后返回一個新RDD;例如:Map將數據的每個元素經過某個函數計算后,返回一個姓的分布式數據集。10.3.2運用4、RDD的創建方式集合并行化valarr=Array(1,2,3,4,5,6,7,8)valrdd1=sc.parallelize(arr,2)//2代表分區數量從外部文件系統,分布式文件系統:如hdfs文件系統,S3valrdd2=sc.textFile("hdfs://node1:9000/words.txt")10.3.2運用4、什么是sparksql?SparkSQL是用于結構化數據處理的Spark模塊。與基本的SparkRDDAPI不同,SparkSQL提供的接口為Spark提供了關于數據結構和正在執行的計算的更多信息。在內部,SparkSQL使用這些額外的信息來執行額外的優化。有幾種與SparkSQL進行交互的方式,包括SQL和DatasetAPI。在計算結果時,使用相同的執行引擎,而不管使用哪種API/語言表示計算。這種統一意味著開發人員可以輕松地在不同的API之間來回切換,基于這些API提供了表達給定轉換的最自然的方式。SparkSQL的一個用途是執行SQL查詢。SparkSQL也可以用來從現有的Hive安裝中讀取數據。用另一種編程語言中運行SQL時,結果將作為數據集/數據框返回。您還可以使用命令行或通過JDBC/ODBC與SQL接口進行交互。10.3.2運用4、sparksql的一些操作//讀取數據,將每一行的數據使用列分隔符分割vallineRDD=sc.textFile("hdfs://localhost:9000/person.txt").map(_.split(""))//定義caseclass(相當于表的schema)caseclassPerson(name:String,age:Int)//將lineRDD轉換成personRDDvalpersonRDD=lineRDD.map(x=>Person(x(0),x(1).toInt))//將personRDD轉換成DataFramevalpersonDF=personRDD.toDF//對personDF進行處理personDF.showpersonDF.select(personDF.col("name")).showpersonDF.select(col("name")).showpersonDF.select("name").showpersonDF.printSchema10.3.2運用//#(SQL風格語法)將DF注冊成表personDF.registerTempTable("t_person")//查詢:sqlContext.sql("select*fromt_personorderbyagedesclimit2").showsqlContext.sql("desct_person").showvalresult=sqlContext.sql("select*fromt_personorderbyagedesc")//保存結果result.save("hdfs://localhost:9000/sql/res1")10.3.2運用6、dataFrame的介紹DataFrame:與RDD類似,DataFrame也是一個分布式數據容器。然而DataFrame更像傳統數據庫的二維表格,除了數據以外,還記錄數據的結構信息,即schema。同時,與Hive類似,DataFrame也支持嵌套數據類型(struct、array和map)。從API易用性的角度上看,DataFrameAPI提供的是一套高層的關系操作,比函數式的RDDAPI要更加友好,門檻更低。由于與R和Pandas的DataFrame類似,SparkDataFrame很好地繼承了傳統單機數據分析的開發體驗。DataFrame與RDD的主要區別在于,前者帶有schema元信息,即DataFrame所表示的二維表數據集的每一列都帶有名稱和類型。這使得SparkSQL得以洞察更多的結構信息,從而對藏于DataFrame背后的數據源以及作用于DataFrame之上的變換進行了針對性的優化,最終達到大幅提升運行時效率的目標。反觀RDD,由于無從得知所存數據元素的具體內部結構,SparkCore只能在stage層面進行簡單、通用的流水線優化。10.3.2運用7、dataFrame的一些操作使用SparkSession,應用程序可以從現有的RDD,Hive表或Spark數據源創建DataFrame。舉個例子,下面根據J

溫馨提示

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

評論

0/150

提交評論