Python和PySpark數(shù)據(jù)分析
定 價(jià):¥118
中 教 價(jià):¥69.62 (5.90折)促銷
庫(kù) 存 數(shù): 11
叢 書 名:數(shù)據(jù)科學(xué)與大數(shù)據(jù)技術(shù)
Spark數(shù)據(jù)處理引擎是一個(gè)驚人的分析工廠:輸入原始數(shù)據(jù),輸出洞察。PySpark用基于Python的API封裝了Spark的核心引擎。它有助于簡(jiǎn)化Spark陡峭的學(xué)習(xí)曲線,并使這個(gè)強(qiáng)大的工具可供任何在Python數(shù)據(jù)生態(tài)系統(tǒng)中工作的人使用。 《Python和PySpark數(shù)據(jù)分析》幫助你使用PySpark解決數(shù)據(jù)科學(xué)的日常挑戰(zhàn)。你將學(xué)習(xí)如何跨多臺(tái)機(jī)器擴(kuò)展處理能力,同時(shí)從任何來(lái)源(無(wú)論是Hadoop集群、云數(shù)據(jù)存儲(chǔ)還是本地?cái)?shù)據(jù)文件)獲取數(shù)據(jù)。一旦掌握了基礎(chǔ)知識(shí),就可以通過(guò)構(gòu)建機(jī)器學(xué)習(xí)管道,并配合Python、pandas和PySpark代碼,探索PySpark的全面多功能特性。 主要內(nèi)容 ● 組織PySpark代碼 ● 管理任何規(guī)模的數(shù)據(jù) ● 充滿信心地?cái)U(kuò)展你的數(shù)據(jù)項(xiàng)目 ● 解決常見(jiàn)的數(shù)據(jù)管道問(wèn)題 ● 創(chuàng)建可靠的長(zhǎng)時(shí)間運(yùn)行的任務(wù)
《Python和PySpark數(shù)據(jù)分析》有 14 章和 3 個(gè)附錄,詳細(xì)介紹了如何將PySpark 應(yīng)用到日常的數(shù)據(jù)科學(xué)工作中。通過(guò)通俗易懂的示例,介紹了PySpark中的實(shí)用知識(shí)點(diǎn)和語(yǔ)法,使你能夠輕松掌握PySpark的核心概念,并將其應(yīng)用于實(shí)際工作中。在本書中,你將學(xué)習(xí)如何使用 PySpark 進(jìn)行數(shù)據(jù)預(yù)處理、模型訓(xùn)練和評(píng)估等常見(jiàn)的數(shù)據(jù)科學(xué)任務(wù)。每個(gè)章節(jié)都以具體的示例和案例展示了 PySpark 在不同情景下的應(yīng)用方法和技巧。通過(guò)實(shí)際操作,你將了解如何使用 PySpark 處理大規(guī)模數(shù)據(jù)集、構(gòu)建復(fù)雜的數(shù)據(jù)處理流程以及應(yīng)對(duì)常見(jiàn)的數(shù)據(jù)質(zhì)量和性能挑戰(zhàn)。
雖然計(jì)算機(jī)的功能越來(lái)越強(qiáng)大,能夠處理更大的數(shù)據(jù)集,但我們對(duì)數(shù)據(jù)的需求增長(zhǎng)得更快。因此,我們構(gòu)建了新的工具,以便在多臺(tái)計(jì)算機(jī)上擴(kuò)展大數(shù)據(jù)任務(wù)。這是有代價(jià)的,早期的工具很復(fù)雜,不僅需要用戶管理數(shù)據(jù)程序,還需要用戶管理計(jì)算機(jī)集群本身的運(yùn)行狀況和性能。我記得我曾嘗試擴(kuò)展自己的程序,但卻得到只需要對(duì)數(shù)據(jù)集進(jìn)行采樣,然后繼續(xù)工作的建議。PySpark改變了游戲規(guī)則。從流行的Python編程語(yǔ)言開(kāi)始,它提供了一個(gè)清晰可讀的API來(lái)操作非常大的數(shù)據(jù)集。盡管如此,當(dāng)你坐下來(lái)編寫代碼時(shí),就像在操作一臺(tái)復(fù)雜且功能強(qiáng)大的機(jī)器。PySpark集功能強(qiáng)大、表現(xiàn)力強(qiáng)、用途廣泛于一體。通過(guò)強(qiáng)大的多維數(shù)據(jù)模型,無(wú)論多大的數(shù)據(jù)規(guī)模,都可以通過(guò)清晰的路徑構(gòu)建數(shù)據(jù)程序,以實(shí)現(xiàn)可伸縮性。作為一名構(gòu)建信用風(fēng)險(xiǎn)模型的數(shù)據(jù)科學(xué)家,我深深喜歡上PySpark。在即將把模型遷移到新的大數(shù)據(jù)環(huán)境時(shí),我們需要設(shè)計(jì)一個(gè)計(jì)劃:在保持業(yè)務(wù)連續(xù)運(yùn)行的同時(shí)智能地轉(zhuǎn)換我們的數(shù)據(jù)產(chǎn)品。作為一個(gè)自封的Python人,我的任務(wù)是幫助團(tuán)隊(duì)熟悉PySpark并加速過(guò)渡。當(dāng)我有機(jī)會(huì)在不同的用例上與無(wú)數(shù)客戶合作時(shí),我對(duì)PySpark的喜愛(ài)程度呈指數(shù)級(jí)增長(zhǎng)。這些項(xiàng)目的共同點(diǎn)是什么?大數(shù)據(jù)和大問(wèn)題都可以通過(guò)強(qiáng)大的數(shù)據(jù)模型解決。需要注意的是,大多數(shù)學(xué)習(xí)Spark的材料都是針對(duì)Scala和Java的,Python開(kāi)發(fā)人員只能將代碼轉(zhuǎn)換成他們喜歡的編程語(yǔ)言。我寫本書是為了將PySpark作為數(shù)據(jù)分析師的優(yōu)秀工具進(jìn)行推廣。幸運(yùn)的是,Spark項(xiàng)目真的讓Python成為主要參與者。現(xiàn)在,你擁有了擴(kuò)展數(shù)據(jù)程序的強(qiáng)大工具,這是史無(wú)前例的。而一旦大數(shù)據(jù)被馴服,就可以發(fā)揮數(shù)據(jù)的無(wú)限可能。
作為一家數(shù)據(jù)驅(qū)動(dòng)軟件公司的ML總監(jiān),Jonathan Rioux每天都在使用PySpark。他向數(shù)據(jù)科學(xué)家、數(shù)據(jù)工程師和精通數(shù)據(jù)的業(yè)務(wù)分析師講授PySpark的用法。
第1章 介紹 11.1 什么是PySpark 11.1.1 從頭開(kāi)始:什么是Spark 21.1.2 PySpark = Spark Python 31.1.3 為什么選擇PySpark 31.2 PySpark的工作原理 51.2.1 使用集群管理器進(jìn)行物理規(guī)劃 61.2.2 懶惰的主管成就工廠的高效 81.3 你將從本書學(xué)到什么 111.4 我們將如何開(kāi)始 121.5 本章小結(jié) 13第Ⅰ部分 介紹:PySpark的第一步第2章 使用PySpark編寫的第一個(gè)數(shù)據(jù)處理程序 172.1 設(shè)置pyspark shell 182.1.1 SparkSession入口點(diǎn) 202.1.2 配置PySpark的日志級(jí)別 212.2 映射程序 222.3 采集和探索:為數(shù)據(jù)轉(zhuǎn)換奠定基礎(chǔ) 232.3.1 用spark.read將數(shù)據(jù)讀入數(shù)據(jù)幀 242.3.2 從結(jié)構(gòu)到內(nèi)容:使用show()探索數(shù)據(jù)幀 272.4 簡(jiǎn)單的列轉(zhuǎn)換:將句子拆解為單詞列表 292.4.1 使用select()選擇特定的列 302.4.2 轉(zhuǎn)換列:將字符串拆分為單詞列表 31
2.4.3 重命名列:alias和withColumnRenamed 332.4.4 重塑數(shù)據(jù):將list分解成行 342.4.5 處理單詞:更改大小寫并刪除標(biāo)點(diǎn)符號(hào) 362.5 篩選記錄 382.6 本章小結(jié) 402.7 擴(kuò)展練習(xí) 40第3章 提交并擴(kuò)展你的第一個(gè)PySpark程序 433.1 對(duì)記錄進(jìn)行分組:計(jì)算詞頻 433.2 使用orderBy對(duì)結(jié)果排序 463.3 保存數(shù)據(jù)幀中的數(shù)據(jù) 483.4 整合所有內(nèi)容:計(jì)數(shù) 493.4.1 使用PySpark的導(dǎo)入約定簡(jiǎn)化依賴 503.4.2 通過(guò)方法鏈簡(jiǎn)化程序 513.5 使用spark-submit以批處理模式啟動(dòng)程序 533.6 本章未涉及的內(nèi)容 543.7 擴(kuò)展詞頻程序 553.8 本章小結(jié) 563.9 擴(kuò)展練習(xí) 57第4章 使用pyspark.sql分析表格數(shù)據(jù) 594.1 什么是表格數(shù)據(jù) 604.2 使用PySpark分析和處理表格數(shù)據(jù) 624.3 在PySpark中讀取和評(píng)估帶分隔符的數(shù)據(jù) 63
4.3.1 第一次使用專門處理CSV文件的SparkReader 634.3.2 自定義SparkReader對(duì)象來(lái)讀取CSV數(shù)據(jù)文件 654.3.3 探索數(shù)據(jù)世界的輪廓 674.4 數(shù)據(jù)操作基礎(chǔ):選擇、刪除、重命名、排序及診斷 684.4.1 了解我們想要什么:選擇列 694.4.2 只保留我們想要的:刪除列 714.4.3 創(chuàng)建新列:使用withColumn()創(chuàng)建新列 734.4.4 整理數(shù)據(jù)幀:對(duì)列進(jìn)行重命名和重排序 764.4.5 用describe()和summary()分析數(shù)據(jù)幀 784.5 本章小結(jié) 804.6 擴(kuò)展練習(xí) 80第5章 數(shù)據(jù)幀操作:連接和分組 835.1 連接數(shù)據(jù) 835.1.1 探索連接的世界 845.1.2 了解連接的兩邊 855.1.3 成功連接的規(guī)則:謂詞 855.1.4 連接方法 875.1.5 連接的命名約定 915.2 通過(guò)groupby和GroupedData匯總數(shù)據(jù) 945.2.1 一個(gè)簡(jiǎn)單的分組藍(lán)圖 955.2.2 對(duì)自定義列使用agg() 985.3 處理null值:刪除或填充 1005.3.1 立即刪除:使用dropna()刪除具有null值的記錄 1005.3.2 使用fillna()替換null值 1015.4 問(wèn)題回顧:端到端程序 1025.5 本章小結(jié) 1055.6 擴(kuò)展練習(xí) 105
第Ⅱ部分 進(jìn)級(jí):將你的想法轉(zhuǎn)化為代碼第6章 多維數(shù)據(jù)幀:使用PySpark處理JSON數(shù)據(jù) 1096.1 讀取JSON數(shù)據(jù):為schemapocalypse做好準(zhǔn)備 1096.1.1 從小處開(kāi)始:將JSON數(shù)據(jù)作為受限的Python字典 1116.1.2 更進(jìn)一步:在PySpark中讀取JSON數(shù)據(jù) 1136.2 用復(fù)雜的數(shù)據(jù)類型突破二維數(shù)據(jù) 1146.2.1 當(dāng)有多個(gè)值時(shí):使用數(shù)組 1166.2.2 映射類型:同一列中的鍵和值 1196.3 結(jié)構(gòu)體:列中的嵌套列 1216.4 構(gòu)建和使用數(shù)據(jù)幀模式 1256.4.1 使用Spark類型作為schema的基本代碼塊 1256.4.2 使用結(jié)構(gòu)體模式原地讀取JSON文檔 1276.4.3 循環(huán)往復(fù):以JSON格式指定模式 1316.5 進(jìn)行整合:使用復(fù)雜數(shù)據(jù)類型減少重復(fù)數(shù)據(jù) 1336.5.1 獲取剛剛好的數(shù)據(jù)幀:explode和collect 1356.5.2 創(chuàng)建自己的層次結(jié)構(gòu):作為函數(shù)的結(jié)構(gòu)體 1386.6 本章小結(jié) 1396.7 擴(kuò)展練習(xí) 139第7章 雙語(yǔ)PySpark:混合Python和SQL 1417.1 根據(jù)我們的了解:pyspark.sql 與普通 SQL 1427.2 為SQL準(zhǔn)備數(shù)據(jù)幀 1437.2.1 將數(shù)據(jù)幀轉(zhuǎn)換為Spark表 1447.2.2 使用Spark目錄 1457.3 SQL和PySpark 1467.4 在數(shù)據(jù)幀方法中使用類似SQL的語(yǔ)法 1487.4.1 獲取所需的行和列:select和where 1487.4.2 將相似的記錄分組在一起:group by和order by 1497.4.3 在分組后使用having進(jìn)行篩選 1507.4.4 使用CREATE關(guān)鍵字創(chuàng)建新表/視圖 1517.4.5 使用UNION和JOIN向表中添加數(shù)據(jù) 1537.4.6 通過(guò)子查詢和公共表表達(dá)式更好地組織SQL代碼 1547.4.7 PySpark與SQL語(yǔ)法的快速總結(jié) 1577.5 簡(jiǎn)化代碼:混合SQL和Python 1577.5.1 使用Python提高彈性并簡(jiǎn)化數(shù)據(jù)讀取階段 1587.5.2 在PySpark中使用SQL風(fēng)格的表達(dá)式 1597.6 結(jié)論 1617.7 本章小結(jié) 1617.8 擴(kuò)展練習(xí) 162第8章 使用Python擴(kuò)展PySpark: RDD和UDF 1658.1 PySpark中的RDD 1668.2 使用Python通過(guò)UDF擴(kuò)展PySpark 1738.2.1 這一切都從簡(jiǎn)單的Python開(kāi)始:使用類型化的Python函數(shù) 1748.2.2 使用udf()將Python函數(shù)轉(zhuǎn)換為UDF 1768.3 本章小結(jié) 1798.4 擴(kuò)展練習(xí) 179第9章 大數(shù)據(jù)就是大量的小數(shù)據(jù):使用pandas UDF 1819.1 通過(guò)pandas進(jìn)行列轉(zhuǎn)換:使用Series UDF 1829.1.1 將Spark連接到谷歌的BigQuery 1839.1.2 Series to Series UDF:使用pandas的列函數(shù) 1889.1.3 標(biāo)量UDF 冷啟動(dòng)=Series UDF的迭代器 1909.2 分組數(shù)據(jù)上的UDF:聚合與應(yīng)用 1939.2.1 分組聚合UDF 1949.2.2 分組映射UDF 1969.3 何時(shí)用,怎么用 1989.4 本章小結(jié) 2009.5 擴(kuò)展練習(xí) 200第10章 不同視角下的數(shù)據(jù):窗口函數(shù) 20310.1 學(xué)習(xí)并使用簡(jiǎn)單的窗口函數(shù) 20410.1.1 確定每年最冷的一天 20410.1.2 創(chuàng)建并使用一個(gè)簡(jiǎn)單的窗口函數(shù)來(lái)獲取最冷的日子 20610.1.3 比較兩種方法 21010.2 除了匯總:使用排名和分析功能 21110.2.1 排名函數(shù):看看誰(shuí)是第一 21210.2.2 分析函數(shù):回顧過(guò)去和展望未來(lái) 21610.3 彈性窗口!使用行和范圍的邊界 21810.3.1 計(jì)數(shù),窗口樣式:靜態(tài)、增長(zhǎng)和無(wú)邊界 21910.3.2 范圍和行 22110.4 綜合實(shí)踐:在窗口中使用UDF 22410.5 查看窗口:成功的窗口函數(shù)的主要步驟 22610.6 本章小結(jié) 22610.7 擴(kuò)展練習(xí) 226第11章 加速PySpark:理解Spark的查詢計(jì)劃 22911.1 芝麻開(kāi)門:通過(guò)Spark UI了解Spark環(huán)境 22911.1.1 查看配置:Environment選項(xiàng)卡 23111.1.2 Executors選項(xiàng)卡和resource management選項(xiàng)卡 23311.1.3 了解任務(wù)的運(yùn)行:通過(guò)Spark UI判斷任務(wù)是否完成 23711.1.4 通過(guò)Spark查詢計(jì)劃映射操作:SQL選項(xiàng)卡 24011.1.5 Spark的核心:解析、分析、優(yōu)化和物理計(jì)劃 24211.2 關(guān)于性能:操作和內(nèi)存 24611.2.1 寬操作與窄操作 24611.2.2 緩存數(shù)據(jù)幀:功能強(qiáng)大,但往往致命(對(duì)于性能而言) 25111.3 本章小結(jié) 254第Ⅲ部分 使用PySpark進(jìn)行機(jī)器學(xué)習(xí)第12章 準(zhǔn)備工作:為機(jī)器學(xué)習(xí)準(zhǔn)備特征 25912.1 閱讀、探索和準(zhǔn)備機(jī)器學(xué)習(xí)數(shù)據(jù)集 26012.1.1 使用toDF()對(duì)列名進(jìn)行標(biāo)準(zhǔn)化 26112.1.2 探索數(shù)據(jù)并獲取第一個(gè)特征列 26212.1.3 解決數(shù)據(jù)錯(cuò)誤并構(gòu)建第一個(gè)特征集 26412.1.4 刪除無(wú)用記錄并估算二分類特征 26612.1.5 處理極值:清洗帶有連續(xù)值的列 26812.1.6 刪除不常見(jiàn)的二分類列 27112.2 特征創(chuàng)建和細(xì)化 27212.2.1 創(chuàng)建自定義特征 27212.2.2 去除高度相關(guān)的特征 27312.3 基于轉(zhuǎn)換器和估計(jì)器的特征準(zhǔn)備 27612.3.1 使用Imputer估計(jì)器填充連續(xù)特征 27712.3.2 使用MinMaxScaler估計(jì)器對(duì)特征進(jìn)行縮放 27912.4 本章小結(jié) 281第13章 通過(guò)機(jī)器學(xué)習(xí)管道增強(qiáng)機(jī)器學(xué)習(xí) 28313.1 轉(zhuǎn)換器和估計(jì)器: Spark中機(jī)器學(xué)習(xí)的構(gòu)建塊 28413.1.1 數(shù)據(jù)進(jìn)出:轉(zhuǎn)換器 28513.1.2 估計(jì)器 28913.2 構(gòu)建(完整的)機(jī)器學(xué)習(xí)管道 29013.2.1 使用向量列類型組裝最終數(shù)據(jù)集 29213.2.2 使用LogisticRegression分類器訓(xùn)練機(jī)器學(xué)習(xí)模型 29513.3 評(píng)估和優(yōu)化模型 29713.3.1 評(píng)估模型準(zhǔn)確率:混淆矩陣和評(píng)估器對(duì)象 29813.3.2 真陽(yáng)性與假陽(yáng)性:ROC曲線 30013.3.3 使用交叉驗(yàn)證優(yōu)化超參數(shù) 30213.4 從模型中獲取最大的驅(qū)動(dòng)力:提取系數(shù) 30513.5 本章小結(jié) 307第14章 構(gòu)建自定義機(jī)器學(xué)習(xí)轉(zhuǎn)換器和估計(jì)器 30914.1 創(chuàng)建自己的轉(zhuǎn)換器 30914.1.1 設(shè)計(jì)轉(zhuǎn)換器:從Param和轉(zhuǎn)換的角度思考 31014.1.2 創(chuàng)建轉(zhuǎn)換器的Param 31214.1.3 getter和setter:成為PySpark中優(yōu)秀的一員 31414.1.4 創(chuàng)建自定義轉(zhuǎn)換器的初始化函數(shù) 31614.1.5 創(chuàng)建轉(zhuǎn)換函數(shù) 31714.1.6 使用轉(zhuǎn)換器 31914.2 創(chuàng)建自己的估計(jì)器 32114.2.1 設(shè)計(jì)估計(jì)器:從模型到Param 32114.2.2 實(shí)現(xiàn)伴生模型:創(chuàng)建自己的Mixin 32414.2.3 創(chuàng)建ExtremeValueCapper估計(jì)器 32614.2.4 使用自定義估計(jì)器 32814.3 在機(jī)器學(xué)習(xí)管道中使用轉(zhuǎn)換器和估計(jì)器 32814.3.1 處理多個(gè)輸入 32914.3.2 將自定義組件應(yīng)用于機(jī)器學(xué)習(xí)管道 33114.4 本章小結(jié) 33414.5 結(jié)論:有數(shù)據(jù),我就開(kāi)心 334附錄A 習(xí)題答案 337附錄B 安裝PySpark 369附錄C 一些有用的Python內(nèi)容 389