Python和PySpark數據分析 Data Analysis with Python and Pyspark

[加] 喬納森·里烏 (Jonathan Rioux)著 殷海英 譯

  • Python和PySpark數據分析-preview-1
  • Python和PySpark數據分析-preview-2
  • Python和PySpark數據分析-preview-3
Python和PySpark數據分析-preview-1

買這商品的人也買了...

商品描述

Spark數據處理引擎是一個驚人的分析工廠:輸入原始數據,輸出洞察。PySpark用基於Python的API封裝了Spark的核心引擎。它有助於簡化Spark陡峭的學習曲線,並使這個強大的工具可供任何在Python數據生態系統中工作的人使用。 《Python和PySpark數據分析》幫助你使用PySpark解決數據科學的日常挑戰。你將學習如何跨多台機器擴展處理能力,同時從任何來源(無論是Hadoop集群、雲數據存儲還是本地數據文件)獲取數據。一旦掌握了基礎知識,就可以通過構建機器學習管道,並配合Python、pandas和PySpark代碼,探索PySpark的全面多功能特性。 主要內容 ● 組織PySpark代碼 ● 管理任何規模的數據 ● 充滿信心地擴展你的數據項目 ● 解決常見的數據管道問題 ● 創建可靠的長時間運行的任務

目錄大綱

第1章  介紹 1

1.1  什麽是PySpark 1

1.1.1  從頭開始:什麽是Spark 2

1.1.2  PySpark = Spark + Python 3

1.1.3  為什麽選擇PySpark 3

1.2  PySpark的工作原理 5

1.2.1  使用集群管理器進行物理規劃 6

1.2.2  懶惰的主管成就工廠的高效 8

1.3  你將從本書學到什麽 11

1.4  我們將如何開始 12

1.5  本章小結 13

第Ⅰ部分  介紹:PySpark的第一步

第2章  使用PySpark編寫的第一個數據處理程序 17

2.1  設置pyspark shell 18

2.1.1  SparkSession入口點 20

2.1.2  配置PySpark的日誌級別 21

2.2  映射程序 22

2.3  採集和探索:為數據轉換奠定基礎 23

2.3.1  用spark.read將數據讀入數據幀 24

2.3.2  從結構到內容:使用show()探索數據幀 27

2.4  簡單的列轉換:將句子拆解為單詞列表 29

2.4.1  使用select()選擇特定的列 30

2.4.2  轉換列:將字符串拆分為單詞列表 31

 

 

2.4.3  重命名列:alias和withColumnRenamed 33

2.4.4  重塑數據:將list分解成行 34

2.4.5  處理單詞:更改大小寫並刪除標點符號 36

2.5  篩選記錄 38

2.6  本章小結 40

2.7  擴展練習 40

第3章  提交並擴展你的第一個PySpark程序 43

3.1  對記錄進行分組:計算詞頻 43

3.2  使用orderBy對結果排序 46

3.3  保存數據幀中的數據 48

3.4  整合所有內容:計數 49

3.4.1  使用PySpark的導入約定簡化依賴 50

3.4.2  通過方法鏈簡化程序 51

3.5  使用spark-submit以批處理模式啟動程序 53

3.6  本章未涉及的內容 54

3.7  擴展詞頻程序 55

3.8  本章小結 56

3.9  擴展練習 57

第4章  使用pyspark.sql分析表格數據 59

4.1  什麽是表格數據 60

4.2  使用PySpark分析和處理表格數據 62

4.3  在PySpark中讀取和評估帶分隔符的數據 63

 

 

4.3.1  第一次使用專門處理CSV文件的SparkReader 63

4.3.2  自定義SparkReader對象來讀取CSV數據文件 65

4.3.3  探索數據世界的輪廓 67

4.4  數據操作基礎:選擇、刪除、

重命名、排序及診斷 68

4.4.1  瞭解我們想要什麽:選擇列 69

4.4.2  只保留我們想要的:刪除列 71

4.4.3  創建新列:使用withColumn()創建新列 73

4.4.4  整理數據幀:對列進行重命名和重排序 76

4.4.5  用describe()和summary()分析數據幀 78

4.5  本章小結 80

4.6  擴展練習 80

第5章  數據幀操作:連接和分組 83

5.1  連接數據 83

5.1.1  探索連接的世界 84

5.1.2  瞭解連接的兩邊 85

5.1.3  成功連接的規則:謂詞 85

5.1.4  連接方法 87

5.1.5  連接的命名約定 91

5.2  通過groupby和GroupedData匯總數據 94

5.2.1  一個簡單的分組藍圖 95

5.2.2  對自定義列使用agg() 98

5.3  處理null值:刪除或填充 100

5.3.1  立即刪除:使用dropna()

刪除具有null值的記錄 100

5.3.2  使用fillna()替換null值 101

5.4  問題回顧:端到端程序 102

5.5  本章小結 105

5.6  擴展練習 105

 

第Ⅱ部分  進級:將你的想法轉化為代碼

第6章  多維數據幀:使用PySpark處理JSON數據 109

6.1  讀取JSON數據:為schemapocalypse做好準備 109

6.1.1  從小處開始:將JSON數據作為受限的Python字典 111

6.1.2  更進一步:在PySpark中讀取JSON數據 113

6.2  用復雜的數據類型突破二維數據 114

6.2.1  當有多個值時:使用數組 116

6.2.2  映射類型:同一列中的鍵和值 119

6.3  結構體:列中的嵌套列 121

6.4  構建和使用數據幀模式 125

6.4.1  使用Spark類型作為schema的基本代碼塊 125

6.4.2  使用結構體模式原地讀取JSON文檔 127

6.4.3  循環往復:以JSON格式指定模式 131

6.5  進行整合:使用復雜數據類型減少重復數據 133

6.5.1  獲取“剛剛好”的數據幀:explode和collect 135

6.5.2  創建自己的層次結構:作為函數的結構體 138

6.6  本章小結 139

6.7  擴展練習 139

第7章  雙語PySpark:混合Python和SQL 141

7.1  根據我們的瞭解:pyspark.sql 與普通 SQL 142

7.2  為SQL準備數據幀 143

7.2.1  將數據幀轉換為Spark表 144

7.2.2  使用Spark目錄 145

7.3  SQL和PySpark 146

7.4  在數據幀方法中使用類似SQL的語法 148

7.4.1  獲取所需的行和列:select和where 148

7.4.2  將相似的記錄分組在一起:group by和order by 149

7.4.3  在分組後使用having進行篩選 150

7.4.4  使用CREATE關鍵字創建新表/視圖 151

7.4.5  使用UNION和JOIN向表中添加數據 153

7.4.6  通過子查詢和公共表表達式更好地組織SQL代碼 154

7.4.7  PySpark與SQL語法的快速總結 157

7.5  簡化代碼:混合SQL和Python 157

7.5.1  使用Python提高彈性並簡化數據讀取階段 158

7.5.2  在PySpark中使用SQL風格的表達式 159

7.6  結論 161

7.7  本章小結 161

7.8  擴展練習 162

第8章  使用Python擴展PySpark: RDD和UDF 165

8.1  PySpark中的RDD 166

8.2  使用Python通過UDF擴展PySpark 173

8.2.1  這一切都從簡單的Python開始:使用類型化的Python函數 174

8.2.2  使用udf()將Python函數轉換為UDF 176

8.3  本章小結 179

8.4  擴展練習 179

第9章  大數據就是大量的小數據:使用pandas UDF 181

9.1  通過pandas進行列轉換:使用Series UDF 182

9.1.1  將Spark連接到谷歌的BigQuery 183

9.1.2  Series to Series UDF:使用pandas的列函數 188

9.1.3  標量UDF+冷啟動=Series UDF的迭代器 190

9.2  分組數據上的UDF:聚合

與應用 193

9.2.1  分組聚合UDF 194

9.2.2  分組映射UDF 196

9.3  何時用,怎麽用 198

9.4  本章小結 200

9.5  擴展練習 200

第10章  不同視角下的數據:窗口函數 203

10.1  學習並使用簡單的窗口函數 204

10.1.1  確定每年最冷的一天 204

10.1.2  創建並使用一個簡單的窗口函數來獲取最冷的日子 206

10.1.3  比較兩種方法 210

10.2  除了匯總:使用排名和分析功能 211

10.2.1  排名函數:看看誰是第一 212

10.2.2  分析函數:回顧過去和展望未來 216

10.3  彈性窗口!使用行和範圍的邊界 218

10.3.1  計數,窗口樣式:靜態、增長和無邊界 219

10.3.2  範圍和行 221

10.4  綜合實踐:在窗口中使用UDF 224

10.5  查看窗口:成功的窗口函數的主要步驟 226

10.6  本章小結 226

10.7  擴展練習 226

第11章  加速PySpark:理解Spark的查詢計劃 229

11.1  芝麻開門:通過Spark UI瞭解Spark環境 229

11.1.1  查看配置:Environment選項卡 231

11.1.2  Executors選項卡和resource management選項卡 233

11.1.3  瞭解任務的運行:通過Spark UI判斷任務是否完成 237

11.1.4  通過Spark查詢計劃映射操作:SQL選項卡 240

11.1.5  Spark的核心:解析、分析、優化和物理計劃 242

11.2  關於性能:操作和內存 246

11.2.1  寬操作與窄操作 246

11.2.2  緩存數據幀:功能強大,但往往致命(對於性能而言) 251

11.3  本章小結 254

第Ⅲ部分  使用PySpark進行機器學習

第12章  準備工作:為機器學習準備特徵 259

12.1  閱讀、探索和準備機器學習數據集 260

12.1.1  使用toDF()對列名進行標準化 261

12.1.2  探索數據並獲取第一個特徵列 262

12.1.3  解決數據錯誤並構建第一個特徵集 264

12.1.4  刪除無用記錄並估算二分類特徵 266

12.1.5  處理極值:清洗帶有連續值的列 268

12.1.6  刪除不常見的二分類列 271

12.2  特徵創建和細化 272

12.2.1  創建自定義特徵 272

12.2.2  去除高度相關的特徵 273

12.3  基於轉換器和估計器的特徵準備 276

12.3.1  使用Imputer估計器填充連續特徵 277

12.3.2  使用MinMaxScaler估計器對特徵進行縮放 279

12.4  本章小結 281

第13章  通過機器學習管道增強機器學習 283

13.1  轉換器和估計器: Spark

中機器學習的構建塊 284

13.1.1  數據進出:轉換器 285

13.1.2  估計器 289

13.2  構建(完整的)機器學習管道 290

13.2.1  使用向量列類型組裝最終數據集 292

13.2.2  使用LogisticRegression分類器訓練機器學習模型 295

13.3  評估和優化模型 297

13.3.1  評估模型準確率:混淆矩陣和評估器對象 298

13.3.2  真陽性與假陽性:ROC曲線 300

13.3.3  使用交叉驗證優化超參數 302

13.4  從模型中獲取最大的驅動力:提取系數 305

13.5  本章小結 307

第14章  構建自定義機器學習轉換器和估計器 309

14.1  創建自己的轉換器 309

14.1.1  設計轉換器:從Param和轉換的角度思考 310

14.1.2  創建轉換器的Param 312

14.1.3  getter和setter:成為PySpark中優秀的一員 314

14.1.4  創建自定義轉換器的初始化函數 316

14.1.5  創建轉換函數 317

14.1.6  使用轉換器 319

14.2  創建自己的估計器 321

14.2.1  設計估計器:從模型到Param 321

14.2.2  實現伴生模型:創建自己的Mixin 324

14.2.3  創建ExtremeValueCapper估計器 326

14.2.4  使用自定義估計器 328

14.3  在機器學習管道中使用轉換器和估計器 328

14.3.1  處理多個輸入 329

14.3.2  將自定義組件應用於機器學習管道 331

14.4  本章小結 334

14.5  結論:有數據,我就開心 334

附錄A  習題答案 337

附錄B  安裝PySpark 369

附錄C  一些有用的Python內容 389