Spark大數(shù)據(jù)分析與實(shí)戰(zhàn)(Python+PySpark)課件 第3章 SparkSQL離線數(shù)據(jù)處理_第1頁
Spark大數(shù)據(jù)分析與實(shí)戰(zhàn)(Python+PySpark)課件 第3章 SparkSQL離線數(shù)據(jù)處理_第2頁
Spark大數(shù)據(jù)分析與實(shí)戰(zhàn)(Python+PySpark)課件 第3章 SparkSQL離線數(shù)據(jù)處理_第3頁
Spark大數(shù)據(jù)分析與實(shí)戰(zhàn)(Python+PySpark)課件 第3章 SparkSQL離線數(shù)據(jù)處理_第4頁
Spark大數(shù)據(jù)分析與實(shí)戰(zhàn)(Python+PySpark)課件 第3章 SparkSQL離線數(shù)據(jù)處理_第5頁
已閱讀5頁,還剩78頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第3章SparkSQL離線數(shù)據(jù)處理Spark大數(shù)據(jù)分析與實(shí)戰(zhàn)01DataFrame基本原理SparkSQL常用操作0203SparkSQL數(shù)據(jù)處理實(shí)例目錄CONTENTS04SparkSQL訪問數(shù)據(jù)庫05DataFrame創(chuàng)建和保存06Spark的數(shù)據(jù)類型轉(zhuǎn)換01DataFrame基本原理DataFrame基本原理DataFrame基本原理博世,10,2500西門子,10,3500普萊西,15,2500RDD[String]DataFrametextFileloadDataFrame(數(shù)據(jù)表)=Schema(表結(jié)構(gòu)字段)+Data(數(shù)據(jù)行)DataFrame類似傳統(tǒng)數(shù)據(jù)庫的二維表,它包含數(shù)據(jù)所需的結(jié)構(gòu)細(xì)節(jié),支持從多種數(shù)據(jù)源中創(chuàng)建,包括結(jié)構(gòu)化文件、外部數(shù)據(jù)庫、Hive表等。因此,我們可以簡單地將DataFrame理解為一張數(shù)據(jù)表DataFrame基本原理除了DataFrame,Spark還有一種名為DataSet的數(shù)據(jù)類型,它不僅與DataFrame一樣包含數(shù)據(jù)和字段結(jié)構(gòu)信息,還結(jié)合了RDD和DataFrame的優(yōu)點(diǎn),既支持很多類似RDD的功能方法,又支持DataFrame的所有操作,使用起來很像RDD,但執(zhí)行效率和空間資源利用率都要比RDD高,可用來方便地處理結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)當(dāng)DataSet存儲的元素是Row類型的對象時,它就等同于DataFrame。所以,DataFrame其實(shí)是一種特殊的、功能稍弱一點(diǎn)的DataSet的特例。DataSet需要通過構(gòu)造JVM對象才能使用,目前僅支持Scala和Java兩種原生的編程語言02SparkSQL常用操作DataFrame的基本創(chuàng)建DataFrame的數(shù)據(jù)操作(DSL)DataFrame的數(shù)據(jù)操作(SQL)DataFrame的基本創(chuàng)建1.從Python集合創(chuàng)建DataFrame使用Python集合創(chuàng)建DataFrame,只需調(diào)用createDataFrame()方法就可以得到一個DataFrame對象,這里用到了Spark的自動類型推斷機(jī)制,以確定各字段的數(shù)據(jù)類型DataFrame的基本創(chuàng)建1.從Python集合創(chuàng)建DataFrame除了使用createDataFrame()方法的自動類型推斷機(jī)制確定字段的數(shù)據(jù)類型,還可以通過一個類似SQL表結(jié)構(gòu)定義的字符串來設(shè)定字段的數(shù)據(jù)類型DataFrame的基本創(chuàng)建1.從Python集合創(chuàng)建DataFrameDataFrame的schema字段結(jié)構(gòu)信息還能夠通過代碼來實(shí)現(xiàn),字段結(jié)構(gòu)通過StructType設(shè)定,字段信息StructField的3個參數(shù)分別代表字段名、字段類型以及字段是否允許為空DataFrame的基本創(chuàng)建2.從csv文件創(chuàng)建DataFrameDataFrame的查看數(shù)據(jù)準(zhǔn)備1.DataFrame的屬性和查看操作2.查看DataFrame結(jié)構(gòu)信息DataFrame的查看2.查看DataFrame結(jié)構(gòu)信息DataFrame的查看這里的show()方法可以根據(jù)需要使用,包括設(shè)定顯示的數(shù)據(jù)行數(shù),以及當(dāng)字段內(nèi)容超長時是否截?cái)囡@示(可避免輸出的排版出現(xiàn)錯亂)等3.查看DataFrame的數(shù)據(jù)DataFrame的查看上面獲取到的DataFrame數(shù)據(jù)行返回的都是Row對象或Row對象數(shù)組,每個Row對象的屬性值就是對應(yīng)數(shù)據(jù)行的字段內(nèi)容3.查看DataFrame的數(shù)據(jù)(foreach/foreachPartition)DataFrame的查看lambda表達(dá)式是對每一行數(shù)據(jù)進(jìn)行處理,具體處理過程定義在myprocess()函數(shù)中。如果要將數(shù)據(jù)寫入數(shù)據(jù)庫,應(yīng)考慮使用foreachPartition算子,因?yàn)樗轻槍σ粋€分區(qū)的批量數(shù)據(jù)創(chuàng)建數(shù)據(jù)庫連接的,可以避免造成處理效率低下的問題(foreach對每條數(shù)據(jù)都要創(chuàng)建一個數(shù)據(jù)庫連接,使用完還要斷開)DataFrame的數(shù)據(jù)操作(DSL)條件排序分組查詢1.DataFrame的數(shù)據(jù)查詢操作DataFrame的數(shù)據(jù)操作(DSL)2.where和filter數(shù)據(jù)過濾過濾條件where()和filter()方法需要提供一個過濾條件的字段參數(shù),該參數(shù)有兩種形式:一種是形如'age>18'的字符串;另一種是使用df.age>18或df['age']>18的Column對象的形式DataFrame的數(shù)據(jù)操作(DSL)3.sort和orderBy數(shù)據(jù)排序如果是默認(rèn)的按升序排列,則相當(dāng)于指定了參數(shù)ascending=True,Python的True和False值分別與1和0等價(jià),所以在指定升序或降序時也可以寫成ascending=1或ascending=0DataFrame的數(shù)據(jù)操作(DSL)4.groupBy數(shù)據(jù)分組groupBy就是對DataFrame的數(shù)據(jù)行依據(jù)某種準(zhǔn)則進(jìn)行分組歸類,返回的是GroupedData類型的數(shù)據(jù),groupBy()方法通常要與聚合函數(shù)一起使用,常用的聚合函數(shù)包括:count()統(tǒng)計(jì)數(shù)量、mean()/avg()統(tǒng)計(jì)字段的平均值、max()/min()統(tǒng)計(jì)字段的最大值和最小值、sum()統(tǒng)計(jì)字段的累加和,等等DataFrame的數(shù)據(jù)操作(DSL)5.select和selectExpr數(shù)據(jù)查詢select和selectExpr算子用于從DataFrame數(shù)據(jù)集中查詢指定的字段,返回一個新的DataFrame數(shù)據(jù)集selectExpr算子還支持對指定字段進(jìn)行處理,如取絕對值、四舍五入等,也就是它可以與表達(dá)式一起使用DataFrame的數(shù)據(jù)操作(DSL)6.DataFrame的數(shù)據(jù)處理操作DataFrame的數(shù)據(jù)操作(DSL)7.distinct和dropDuplicates去重distinct()要求數(shù)據(jù)行的每個字段都相同才會刪除,dropDuplicates是按指定的字段相同就刪除DataFrame的數(shù)據(jù)操作(DSL)8.dropna和drop按列刪除如果DataFrame數(shù)據(jù)集中存在不完整的數(shù)據(jù)行,比如某些行缺失部分字段內(nèi)容,此時就可以通過dropna()方法來過濾這種數(shù)據(jù)行,或者根據(jù)需要“剪掉”某些字段,這也是ETL數(shù)據(jù)清洗工作中常見的一種做法。但值得一提的是,原始的DataFrame數(shù)據(jù)集并不會發(fā)生變化DataFrame的數(shù)據(jù)操作(DSL)9.limit限定數(shù)據(jù)limit()方法返回一個新的DataFrame,通過這種方式減少了后續(xù)處理的數(shù)據(jù)量,這一點(diǎn)與show()方法是不同的,show()方法只顯示指定數(shù)量的記錄,并不影響實(shí)際的數(shù)據(jù)行數(shù)應(yīng)注意的是,limit()方法返回了一個新的DataFrame,原始DataFrame不受影響DataFrame的數(shù)據(jù)操作(DSL)10.withColumn和withColumnRenamed按列處理withColumn在當(dāng)前DataFrame添加一列或替換同名列。如果在新增或替換時還要修改字段的值,則可以對它進(jìn)行簡單的運(yùn)算或借助函數(shù)進(jìn)行修改withColumnRenamed則用于修改現(xiàn)有列的字段名,列數(shù)據(jù)保持不變DataFrame的數(shù)據(jù)操作(DSL)11.intersectAll交集與unionByName并集intersectAll用來獲取兩個DataFrame的交集,得到的是兩者按字段順序的相同數(shù)據(jù)行(只看字段位置而不看字段名,且交集可能存在重復(fù)數(shù)據(jù)行)unionByName用來獲取兩個DataFrame的并集,得到的是將兩者數(shù)據(jù)行按字段名合并到一起的記錄DataFrame的數(shù)據(jù)操作(DSL)12.join連接處理join算子用于連接兩個DataFrame的數(shù)據(jù)行,包括內(nèi)連接、左外連接、右外連接、全外連接方式等,默認(rèn)采用內(nèi)連接(inner)的方式處理DataFrame的數(shù)據(jù)操作(SQL)1.DataFrame數(shù)據(jù)集的創(chuàng)建DataFrame臨時視圖表又分為“局部會話范圍”和“全局會話范圍”兩種形式,前者僅限當(dāng)前的SparkSession會話使用,后者可在當(dāng)前Spark應(yīng)用程序的所有SparkSession實(shí)例中訪問到。在使用全局視圖表時,視圖名稱需要附帶一個“global_temp.”前綴,這是因?yàn)槿忠晥D是綁定到global_temp系統(tǒng)保留數(shù)據(jù)庫上的無論是哪一類視圖,它們在使用完畢后就會被自動刪除,這也是被稱為“臨時視圖”的原因,其與在關(guān)系數(shù)據(jù)庫中創(chuàng)建視圖的做法不一樣DataFrame的數(shù)據(jù)操作(SQL)websiteaccess_log2.DataFrame數(shù)據(jù)集的準(zhǔn)備使用createTempView()和createGlobalTempView()方法創(chuàng)建的視圖,其名稱不能被重復(fù)利用,必須先刪除才行,而使用createOrReplaceTempView()和createOrReplaceGlobalTempView()方法創(chuàng)建的視圖,其名稱可以被直接被替換使用,相對更加方便一點(diǎn)DataFrame的數(shù)據(jù)操作(SQL)website3.DataFrame視圖的SQL查詢(查詢指定的字段值、無重復(fù)的字段值)SQL基本查詢包括SELECT、SELECTDISTINCT、WHERE、ORDERBY等。如果熟悉SQL語法,這部分內(nèi)容與數(shù)據(jù)庫的SQL語句基本是一樣的DataFrame的數(shù)據(jù)操作(SQL)4.DataFrame視圖的SQL查詢(按條件查詢)website條件查詢是通過WHERE子句實(shí)現(xiàn)的,條件表達(dá)式可以與AND、OR、NOT組合使用DataFrame的數(shù)據(jù)操作(SQL)4.DataFrame視圖的SQL查詢(按條件查詢)websiteDataFrame的數(shù)據(jù)操作(SQL)website5.DataFrame視圖的SQL查詢(查詢結(jié)果排序)ORDERBY默認(rèn)按升序排列,如果要按降序排列,則可在排序字段后面增加DESC關(guān)鍵字(升序?yàn)锳SC關(guān)鍵字,可省略)DataFrame的數(shù)據(jù)操作(SQL)5.DataFrame視圖的SQL查詢(查詢結(jié)果排序)website這個例子是先按照country字段降序排列,再按照alexa字段升序排列DataFrame的數(shù)據(jù)操作(SQL)website6.DataFrame視圖的SQL查詢(查詢指定數(shù)量的記錄)SELECT-LIMIT可以設(shè)定查詢返回的記錄數(shù),這對于擁有大量記錄的數(shù)據(jù)集來說比較有用DataFrame的數(shù)據(jù)操作(SQL)website7.DataFrame視圖的SQL查詢(模糊查詢)模糊查詢是指字段值是否符合某種匹配模式,而不是精確匹配。SQL中的LIKE操作符可用于模糊匹配WHERE字段列的內(nèi)容DataFrame的數(shù)據(jù)操作(SQL)7.DataFrame視圖的SQL查詢(模糊查詢)websiteSQL查詢在執(zhí)行模糊匹配時,百分號(%)代表0或多個字符,下劃線(_)代表一個字符DataFrame的數(shù)據(jù)操作(SQL)8.DataFrame視圖的SQL查詢(in/between…and范圍)websiteSQL的IN操作符允許在WHERE子句中規(guī)定多個值,BETWEEN操作符用于選取介于兩個值之間的數(shù)據(jù)范圍內(nèi)的值DataFrame的數(shù)據(jù)操作(SQL)8.DataFrame視圖的SQL查詢(in/between…and范圍)websiteDataFrame的數(shù)據(jù)操作(SQL)access_log8.DataFrame視圖的SQL查詢(in/between…and范圍)這里查詢的date字段值介于'2016-05-10'和'2016-05-14'(不含'2016-05-14')之間DataFrame的數(shù)據(jù)操作(SQL)websiteaccess_log9.DataFrame視圖的SQL查詢(連接查詢)SQL連接查詢使用JOIN操作符,它按照某些字段將來自兩張或兩張以上數(shù)據(jù)表的數(shù)據(jù)行結(jié)合起來,包括INNERJOIN、LEFTJOIN、RIGHTJOIN等。其中,最常見的INNERJOIN用于從多張數(shù)據(jù)表中返回滿足條件的所有行DataFrame的數(shù)據(jù)操作(SQL)10.DataFrame視圖的SQL查詢(嵌套查詢/子查詢)websiteaccess_log這里“SELECTsite_idFROMaccess_logWHEREcount>200”得到的是僅有一個字段的臨時表,然后使用IN關(guān)鍵字將其轉(zhuǎn)換為一個查詢條件,從而得到二次查詢的結(jié)果DataFrame的數(shù)據(jù)操作(SQL)access_log11.DataFrame視圖的SQL查詢(聚合查詢)SparkSQL還實(shí)現(xiàn)了常用的聚合函數(shù)功能,包括COUNT()、AVG()、MAX()、MIN()等DataFrame的數(shù)據(jù)操作(SQL)access_log12.DataFrame視圖的SQL查詢(分組統(tǒng)計(jì))在SparkSQL中,分組統(tǒng)計(jì)是通過關(guān)鍵字GROUPBY來實(shí)現(xiàn)的,分組統(tǒng)計(jì)通常要結(jié)合聚合函數(shù)一起使用DataFrame的數(shù)據(jù)操作(SQL)13.DataFrame視圖的SQL查詢(用戶自定義函數(shù)UDF)SparkSQL內(nèi)置的pyspark.sql.functions模塊中包含大量可直接使用的數(shù)據(jù)處理函數(shù),包括標(biāo)量值函數(shù)、聚合函數(shù)等,以支持對DataFrame的行或列的數(shù)據(jù)進(jìn)行相應(yīng)處理用戶自定義函數(shù)(UserDefinedFunction,UDF),是指通過Spark支持的編程語言定義一個函數(shù)傳遞給SparkSQL,使用起來就像內(nèi)置的sum()、avg()等函數(shù)一樣。在用戶自定義函數(shù)中,可以靈活運(yùn)用編程語言本身提供的各種函數(shù)、方法、庫等以實(shí)現(xiàn)所需功能,從而不受SparkSQL本身的限制DataFrame的數(shù)據(jù)操作(SQL)website13.DataFrame視圖的SQL查詢(用戶自定義函數(shù)UDF)DataFrame的數(shù)據(jù)操作(SQL)df1=>website用戶自定義函數(shù)不僅可以應(yīng)用在SQL中,而且對DSL形式的API操作也是支持的13.DataFrame視圖的SQL查詢(用戶自定義函數(shù)UDF)03Spark數(shù)據(jù)處理實(shí)例詞頻統(tǒng)計(jì)案例人口信息統(tǒng)計(jì)電影評分?jǐn)?shù)據(jù)分析詞頻統(tǒng)計(jì)案例1.需求分析這個文件的數(shù)據(jù)是非結(jié)構(gòu)化的,每行的單詞個數(shù)是不固定的,也沒有具體的含義。為了使用SparkSQL來處理它,第1步工作就是要將這個文件的數(shù)據(jù)轉(zhuǎn)換成結(jié)構(gòu)化的形式,由于我們真正關(guān)注的是各個單詞,因此可以像以往那樣將文件數(shù)據(jù)轉(zhuǎn)換為RDD,然后經(jīng)過一定的處理后將其轉(zhuǎn)變?yōu)镈ataFrame,這樣就可以由SparkSQL來處理使用SparkSQL,統(tǒng)計(jì)LICENSE-py4j.txt文件中所包含單詞的出現(xiàn)次數(shù)詞頻統(tǒng)計(jì)案例2.SparkSQL編程實(shí)現(xiàn)首先將文件數(shù)據(jù)轉(zhuǎn)換為rdd1,由于它是非結(jié)構(gòu)化的數(shù)據(jù),因此同樣需要把每行包含的單詞切解出來。為了能使用SparkSQL進(jìn)行處理,這里還把每個單詞變成一個結(jié)構(gòu)化的Row對象(代表一條表數(shù)據(jù)記錄),并將RDD轉(zhuǎn)換為DataFrame,后續(xù)就是常規(guī)的SparkSQL操作了使用SparkSQL進(jìn)行詞頻統(tǒng)計(jì)的過程,比直接通過RDD解決顯得更加麻煩,這里的目的主要是提供一種使用SparkSQL處理非結(jié)構(gòu)化數(shù)據(jù)的思路。通常來說,在面對非結(jié)構(gòu)化數(shù)據(jù)時,一般要先將其轉(zhuǎn)換成結(jié)構(gòu)化的形式才能由SparkSQL來處理人口信息統(tǒng)計(jì)1.需求分析有一個包含600萬人口信息的數(shù)據(jù)存儲在當(dāng)前主目錄的people_info.csv文本文件中,其中,每行數(shù)據(jù)代表一個人的基本信息,3個字段分別是編號、性別(F/M)、身高(單位是cm),現(xiàn)要求使用SparkSQL完成以下數(shù)據(jù)分析任務(wù):(1)統(tǒng)計(jì)男性身高超過170cm以及女性身高超過165cm的總?cè)藬?shù)。(2)按照性別分組統(tǒng)計(jì)男性和女性人數(shù)。(3)統(tǒng)計(jì)身高大于210cm的前50名男性,并按身高從大到小排序。(4)統(tǒng)計(jì)男性的平均身高。(5)統(tǒng)計(jì)女性身高的最大值。編號ID、性別(F女/M男)、身高(cm)人口信息統(tǒng)計(jì)people_info(1)從csv數(shù)據(jù)文件構(gòu)造出DataFrame數(shù)據(jù)表2.SparkSQL編程實(shí)現(xiàn)人口信息統(tǒng)計(jì)people_info(2)統(tǒng)計(jì)男性身高超過170cm以及女性身高超過165cm的總?cè)藬?shù)第1個問題,即按照要求的條件統(tǒng)計(jì)人數(shù),這需要用到SQL的count()統(tǒng)計(jì)函數(shù)人口信息統(tǒng)計(jì)people_info(3)按照性別分組統(tǒng)計(jì)男女人數(shù)第2個問題實(shí)際是一個分組統(tǒng)計(jì)操作,可以先通過GROUPBY按指定字段進(jìn)行分組,然后將分組后的字段應(yīng)用count()、avg()、max()等聚合函數(shù)人口信息統(tǒng)計(jì)people_info(4)統(tǒng)計(jì)身高大于210cm的前50名男性,從大到小排序第3個問題是統(tǒng)計(jì)身高大于210cm的前50名男性,并按身高從大到小排序,因此需要使用ORDERBY和LIMIT人口信息統(tǒng)計(jì)people_info(5)統(tǒng)計(jì)男性的平均身高第4個問題是統(tǒng)計(jì)男性的平均身高,需要使用avg()聚合函數(shù)人口信息統(tǒng)計(jì)people_info第5個問題是統(tǒng)計(jì)女性身高的最大值,這個問實(shí)現(xiàn)起來題也比較簡單(6)統(tǒng)計(jì)女性身高的最大值電影評分?jǐn)?shù)據(jù)分析字段:movieIdtitlegenres

電影id名稱類別字段:userIdmovieIdratingtimestamp

用戶id電影id用戶評分

時間戳1.需求分析MovieLens是一個關(guān)于電影評分的公開數(shù)據(jù)集,里面包含了大量的IMDB(InternetMovieDataBase)用戶對電影的評分信息,所以也經(jīng)常被用來做推薦系統(tǒng)、機(jī)器學(xué)習(xí)算法的測試數(shù)據(jù)集。MovieLens數(shù)據(jù)集的movies.csv和ratings.csv文件中分別存放了電影信息、電影的用戶評分?jǐn)?shù)據(jù)現(xiàn)使用SparkSQL完成以下數(shù)據(jù)分析任務(wù):(1)查找電影評分次數(shù)排名前10的電影。(2)查找電影評分次數(shù)超過5000次,且平均評分排名前10的電影及對應(yīng)的平均評分。電影評分?jǐn)?shù)據(jù)分析ratingsmovies(1)從csv數(shù)據(jù)文件分別構(gòu)造出兩個DataFrame數(shù)據(jù)表2.SparkSQL編程實(shí)現(xiàn)電影評分?jǐn)?shù)據(jù)分析(1)從csv數(shù)據(jù)文件分別構(gòu)造出兩個DataFrame數(shù)據(jù)表2.SparkSQL編程實(shí)現(xiàn)電影評分?jǐn)?shù)據(jù)分析max10_ratingsratingsa)先按movieId字段對電影進(jìn)行分組,將每個電影對應(yīng)的評分用戶個數(shù)統(tǒng)計(jì)出來b)按用戶數(shù)進(jìn)行降序排列,以獲取前10部電影c)把查詢出來的數(shù)據(jù)集注冊為max10_ratings視圖表(2)查找評分次數(shù)最多的前10部電影電影評分?jǐn)?shù)據(jù)分析movies根據(jù)找到的movieId查詢出電影的具體信息(2)查找評分次數(shù)最多的前10部電影max10_ratings電影評分?jǐn)?shù)據(jù)分析ratings(2)查找評分次數(shù)最多的前10部電影movies第二種方法,就是將第一種方法的兩步合并到一起處理電影評分?jǐn)?shù)據(jù)分析moviesratings基本思路:a)求每部電影的評分用戶數(shù)b)求每部電影的平均評分c)求評分次數(shù)(用戶數(shù))超過5000且平均評分前10的movieIde)根據(jù)movieId獲取電影信息(3)查找電影評分次數(shù)超過5000,且平均評分最高的前10部電影名稱,以及對應(yīng)的平均評分電影評分?jǐn)?shù)據(jù)分析moviesratings(3)查找電影評分次數(shù)超過5000,且平均評分最高的前10部電影名稱,以及對應(yīng)的平均評分04SparkSQL訪問數(shù)據(jù)庫在Linux操作系統(tǒng)上安裝MySQLDataFrame寫入MySQL從MySQL中創(chuàng)建DataFrameLinux上安裝MySQL更新安裝源安裝mysql查看mysql服務(wù)狀態(tài)在Ubuntu環(huán)境下安裝MySQL,可以通過軟件源倉庫在線安裝,也可以自行下載合適的離線版本安裝Linux上安裝MySQL安裝完畢,在使用之前先初始化mysql登錄,設(shè)置好登錄密碼(登錄賬戶為mysql中的root用戶)Linux上安裝MySQLpeople數(shù)據(jù)庫people_info表準(zhǔn)備要用的數(shù)據(jù)庫和表,先連接到數(shù)據(jù)庫服務(wù),然后創(chuàng)建一個people數(shù)據(jù)庫以及people_info表,并在表中添加一條測試數(shù)據(jù)Linux上安裝MySQL由于SparkSQL連接MySQL在底層仍是通過Java實(shí)現(xiàn)的,因此還需將連接JDBC的jar包文件復(fù)制到Spark安裝目錄的jars文件夾中注意:當(dāng)在Spark的安裝目錄新增了一個連接MySQL的JDBC驅(qū)動文件,為了使其生效,還應(yīng)將當(dāng)前正在運(yùn)行的PySparkShell交互式編程環(huán)境退出(按Ctrl+D快捷鍵),重新執(zhí)行pyspark命令進(jìn)入PySparkShell交互式編程環(huán)境DataFrame寫入MySQLmy_people_info使用前面人口信息統(tǒng)計(jì)案例中的數(shù)據(jù),準(zhǔn)備將其中的10條記錄保存到MySQL中。首先創(chuàng)建一個DataFrameDataFrame寫入MySQLpeoplepeople_infomy_people_info前10條從創(chuàng)建的DataFrame中查詢10條數(shù)據(jù)行保存到MySQL數(shù)據(jù)庫的people_info表中DataFrame寫入MySQL驗(yàn)證一下mysql表中是否有來自DataFrame的數(shù)據(jù)從MySQL創(chuàng)建DataFrame從數(shù)據(jù)庫表中讀取數(shù)據(jù)到DataFrame,可以用spark.read.jdbc()方法來實(shí)現(xiàn),在讀取時需要提供連接數(shù)據(jù)庫所需的信息(如用戶名、密碼、數(shù)據(jù)庫驅(qū)動類名等),返回的是一個DataFrame對象05DataFrame創(chuàng)建

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論