內容簡介
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