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