本書針對(duì)Flink 1.11版本和Alink 1.2版本,采用“知識(shí)點(diǎn)+實(shí)例”的形式編寫,包括47個(gè)基于知識(shí)點(diǎn)的實(shí)例和1個(gè)綜合項(xiàng)目實(shí)例。第1章對(duì)大數(shù)據(jù)和人工智能進(jìn)行初步介紹;第2章用一個(gè)實(shí)例總覽Flink的關(guān)鍵知識(shí)點(diǎn);第3~5章介紹Flink的架構(gòu)、開發(fā)基礎(chǔ)和轉(zhuǎn)換算子;第6、7、10、11章深入講解4種開發(fā)Flink應(yīng)用程序的API;第8、9章講解操作Flink狀態(tài)(計(jì)算和容錯(cuò))的狀態(tài)處理器API和用于處理復(fù)雜事件(異常檢測(cè)、反欺詐、風(fēng)險(xiǎn)控制)的CEP庫;第12章講解Flink如何與其他外部系統(tǒng)集成,并實(shí)現(xiàn)Flink與Kafka的集成;第13章介紹機(jī)器學(xué)習(xí)的基礎(chǔ)知識(shí);第14章講解機(jī)器學(xué)習(xí)框架Alink的知識(shí)和實(shí)戰(zhàn)應(yīng)用;第15章是項(xiàng)目實(shí)戰(zhàn),使用大數(shù)據(jù)和機(jī)器學(xué)習(xí)技術(shù)實(shí)現(xiàn)一個(gè)廣告推薦系統(tǒng)(包含離線訓(xùn)練、在線訓(xùn)練、實(shí)時(shí)預(yù)測(cè)和在線服務(wù))。本書可以作為具備Java基礎(chǔ)的開發(fā)人員、大數(shù)據(jù)領(lǐng)域從業(yè)人員的參考用書。另外,閱讀本書的讀者不需要具備高等數(shù)學(xué)知識(shí)和人工智能的底層算法知識(shí)。
12年來一直在某一線互聯(lián)網(wǎng)公司擔(dān)任資深系統(tǒng)分析師。目前帶領(lǐng)3個(gè)研發(fā)團(tuán)隊(duì),承擔(dān)系統(tǒng)的分析、設(shè)計(jì)、實(shí)施、演進(jìn)以及技術(shù)團(tuán)隊(duì)管理和培訓(xùn)等職責(zé)!禨pring Boot實(shí)戰(zhàn)派》《Spring Cloud微服務(wù)架構(gòu)實(shí)戰(zhàn)派》作者
入門篇
第1章 進(jìn)入大數(shù)據(jù)和人工智能世界 2
1.1 認(rèn)識(shí)大數(shù)據(jù)和人工智能 2
1.2 認(rèn)識(shí)Flink 4
1.2.1 Flink是什么 4
1.2.2 Flink的發(fā)展歷程 4
1.2.3 Flink的應(yīng)用場(chǎng)景 6
1.3 認(rèn)識(shí)Alink 6
1.4 如何使用本書的源碼 6
-
第2章 【實(shí)例1】使用Flink的4種API處理無界數(shù)據(jù)流和有界數(shù)據(jù)流 8
2.1 創(chuàng)建Flink應(yīng)用程序 8
2.2 使用DataSet API處理有界數(shù)據(jù)流 10
2.2.1 編寫批處理代碼 10
2.2.2 配置依賴作用域 11
2.2.3 測(cè)試Flink應(yīng)用程序 12
2.3 使用DataStream API處理無界數(shù)據(jù)流 12
2.3.1 自定義無界數(shù)據(jù)流數(shù)據(jù)源 12
2.3.2 編寫無界數(shù)據(jù)流處理代碼 13
2.3.3 使用DataStream API的窗口功能處理無界數(shù)據(jù)流 14
2.4 使用Table API處理無界數(shù)據(jù)流和有界數(shù)據(jù)流 16
2.4.1 處理無界數(shù)據(jù)流 16
2.4.2 處理有界數(shù)據(jù)流 17
2.5 使用SQL處理無界數(shù)據(jù)流和有界數(shù)據(jù)流 19
2.5.1 處理無界數(shù)據(jù)流 19
2.5.2 處理有界數(shù)據(jù)流 19
2.6 生成執(zhí)行計(jì)劃圖 20
-
基礎(chǔ)篇
第3章 概覽Flink 24
3.1 了解流處理和批處理 24
3.1.1 數(shù)據(jù)流 24
3.1.2 流處理 25
3.1.3 流式的批處理 26
3.1.4 有狀態(tài)流處理 27
3.1.5 并行數(shù)據(jù)流 28
3.2 Flink的整體架構(gòu) 29
3.2.1 部署層 30
3.2.2 執(zhí)行引擎層 30
3.2.3 核心API層 30
3.2.4 領(lǐng)域庫層 30
3.3 Flink的編程接口 31
3.3.1 有狀態(tài)實(shí)時(shí)流處理接口 31
3.3.2 核心API(DataStream API/DataSet API) 32
3.3.3 Table API和SQL 33
3.3.4 比較DataStream API、DataSet API、Table API和SQL 34
3.4 Flink的項(xiàng)目依賴 34
3.4.1 Flink核心依賴和用戶的應(yīng)用程序依賴 35
3.4.2 流處理應(yīng)用程序和批處理應(yīng)用程序所需的依賴 35
3.4.3 Table API和SQL的依賴 36
3.4.4 Connector和Library的依賴 38
3.4.5 Hadoop的依賴 38
3.5 了解分布式執(zhí)行引擎的環(huán)境 38
3.5.1 作業(yè)管理器、任務(wù)管理器、客戶端 38
3.5.2 任務(wù)插槽和資源 40
3.5.3 Flink應(yīng)用程序的執(zhí)行 41
-
第4章 Flink開發(fā)基礎(chǔ) 43
4.1 開發(fā)Flink應(yīng)用程序的流程 43
4.1.1 了解Flink應(yīng)用程序的結(jié)構(gòu) 43
4.1.2 配置執(zhí)行環(huán)境和參數(shù) 44
4.1.3 初始化數(shù)據(jù)源 46
4.1.4 數(shù)據(jù)轉(zhuǎn)換 46
4.1.5 輸出結(jié)果和觸發(fā)程序 47
4.2 處理參數(shù) 49
4.2.1 將參數(shù)傳遞給函數(shù) 49
4.2.2 用參數(shù)工具讀取參數(shù) 50
4.2.3 在Flink應(yīng)用程序中使用參數(shù) 51
4.2.4 【實(shí)例2】通過withParameters()方法傳遞和使用參數(shù) 53
4.2.5 【實(shí)例3】通過參數(shù)工具讀取和使用參數(shù) 54
4.3 自定義函數(shù) 56
4.3.1 自定義函數(shù)的常用方式 56
4.3.2 了解累加器和計(jì)數(shù)器 57
4.3.3 【實(shí)例4】實(shí)現(xiàn)累加器 58
4.4 數(shù)據(jù)類型和序列化 59
4.4.1 認(rèn)識(shí)數(shù)據(jù)類型 59
4.4.2 類型擦除和類型推斷 62
4.4.3 【實(shí)例5】在Flink中使用元組類 63
4.4.4 【實(shí)例6】在Flink中使用Java的POJO類 63
4.4.5 處理類型 65
4.4.6 認(rèn)識(shí)TypeInformation類 65
4.4.7 認(rèn)識(shí)Java API類型信息 66
-
第5章 Flink的轉(zhuǎn)換算子 69
5.1 定義鍵 69
5.1.1 定義元組的鍵 69
5.1.2 使用字段表達(dá)式定義鍵 70
5.1.3 使用鍵選擇器函數(shù)定義鍵 71
5.2 Flink的通用轉(zhuǎn)換算子 71
5.2.1 DataStream和DataSet的通用轉(zhuǎn)換算子 71
5.2.2 【實(shí)例7】使用Map算子轉(zhuǎn)換數(shù)據(jù) 72
5.2.3 【實(shí)例8】使用FlatMap算子拆分句子 73
5.2.4 【實(shí)例9】使用Filter算子過濾數(shù)據(jù) 74
5.2.5 【實(shí)例10】使用Project算子投射字段并排序 75
5.3 Flink的DataSet API專用轉(zhuǎn)換算子 76
5.3.1 聚合轉(zhuǎn)換算子 76
5.3.2 分區(qū)轉(zhuǎn)換算子 78
5.3.3 排序轉(zhuǎn)換算子 79
5.3.4 關(guān)聯(lián)轉(zhuǎn)換算子 80
5.3.5 【實(shí)例11】在按字段位置鍵分組的數(shù)據(jù)集上進(jìn)行聚合轉(zhuǎn)換 81
5.3.6 【實(shí)例12】在分組元組上進(jìn)行比較運(yùn)算 82
5.3.7 【實(shí)例13】使用MapPartition算子統(tǒng)計(jì)數(shù)據(jù)集的分區(qū)計(jì)數(shù) 83
5.3.8 【實(shí)例14】對(duì)POJO數(shù)據(jù)集和元組進(jìn)行分組與聚合 84
5.3.9 【實(shí)例15】使用First-n算子返回?cái)?shù)據(jù)集的前n個(gè)元素 87
5.4 Flink的DataStream API專用轉(zhuǎn)換算子 88
5.4.1 多流轉(zhuǎn)換算子 88
5.4.2 鍵控流轉(zhuǎn)換算子 89
5.4.3 窗口轉(zhuǎn)換算子 91
5.4.4 連接轉(zhuǎn)換算子 92
5.4.5 物理分區(qū)算子 95
5.4.6 其他轉(zhuǎn)換算子 96
5.4.7 【實(shí)例16】使用Union算子連接多個(gè)數(shù)據(jù)源 97
5.4.8 【實(shí)例17】使用Connect算子連接不同類型的數(shù)據(jù)源 98
5.4.9 【實(shí)例18】使用Reduce操作鍵控流 99
5.4.10 【實(shí)例19】使用Split算子和Select算子拆分?jǐn)?shù)據(jù)流,并選擇拆分后的數(shù)據(jù)流 100
5.4.11 任務(wù)、算子鏈和資源組 101
5.5 認(rèn)識(shí)低階流處理算子 103
5.5.1 ProcessFunction——在非循環(huán)流上實(shí)現(xiàn)低階運(yùn)算 103
5.5.2 CoProcessFunction——在兩個(gè)輸入流上實(shí)現(xiàn)低階運(yùn)算 104
5.5.3 KeyedProcessFunction——在鍵控流上實(shí)現(xiàn)低階運(yùn)算 104
5.5.4 計(jì)時(shí)器和計(jì)時(shí)器服務(wù) 104
5.6 迭代運(yùn)算 106
5.6.1 認(rèn)識(shí)DataSet的全量迭代運(yùn)算和增量迭代運(yùn)算 106
5.6.2 比較全量迭代運(yùn)算和增量迭代運(yùn)算 108
5.6.3 【實(shí)例20】全量迭代 108
5.6.4 【實(shí)例21】增量迭代 109
5.6.5 認(rèn)識(shí)DataStream的迭代 111
5.6.6 【實(shí)例22】實(shí)現(xiàn)DataStream的歸零迭代運(yùn)算 112
-
進(jìn)階篇
第6章 使用DataSet API實(shí)現(xiàn)批處理 116
6.1 DataSet API的數(shù)據(jù)源 116
6.1.1 認(rèn)識(shí)DataSet API的數(shù)據(jù)源 116
6.1.2 配置CSV解析 117
6.1.3 【實(shí)例23】讀取和解析CSV文件 118
6.1.4 讀取壓縮文件 119
6.2 操作函數(shù)中的數(shù)據(jù)對(duì)象 121
6.2.1 禁用對(duì)象重用 121
6.2.2 啟用對(duì)象重用 122
6.3 語義注釋 122
6.3.1 轉(zhuǎn)發(fā)字段注釋 123
6.3.2 【實(shí)例24】使用函數(shù)類注釋聲明轉(zhuǎn)發(fā)字段信息 124
6.3.3 非轉(zhuǎn)發(fā)字段 125
6.3.4 【實(shí)例25】聲明非轉(zhuǎn)發(fā)字段 125
6.3.5 讀取字段信息 126
6.3.6 【實(shí)例26】聲明讀取字段信息 126
6.4 認(rèn)識(shí)分布式緩存和廣播變量 127
6.4.1 分布式緩存 127
6.4.2 廣播變量 128
-
第7章 使用DataStream API實(shí)現(xiàn)流處理 130
7.1 認(rèn)識(shí)DataStream API 130
7.1.1 DataStream API的數(shù)據(jù)源 130
7.1.2 DataStream API的數(shù)據(jù)接收器 131
7.2 窗口 132
7.2.1 認(rèn)識(shí)時(shí)間驅(qū)動(dòng)和數(shù)據(jù)驅(qū)動(dòng)的窗口 132
7.2.2 認(rèn)識(shí)窗口分配器 133
7.2.3 認(rèn)識(shí)鍵控窗口和非鍵控窗口 138
7.2.4 認(rèn)識(shí)窗口的生命周期 139
7.2.5 【實(shí)例27】實(shí)現(xiàn)滾動(dòng)時(shí)間窗口和滑動(dòng)時(shí)間窗口 140
7.2.6 【實(shí)例28】實(shí)現(xiàn)滾動(dòng)計(jì)數(shù)窗口和滑動(dòng)計(jì)數(shù)窗口 141
7.2.7 【實(shí)例29】實(shí)現(xiàn)會(huì)話窗口 144
7.2.8 認(rèn)識(shí)窗口函數(shù) 146
7.2.9 【實(shí)例30】使用窗口函數(shù)實(shí)現(xiàn)窗口內(nèi)的計(jì)算 148
7.2.10 觸發(fā)器 152
7.2.11 【實(shí)例31】自定義觸發(fā)器 154
7.2.12 移除器 155
7.2.13 處理遲到數(shù)據(jù) 156
7.2.14 處理窗口結(jié)果 157
7.3 認(rèn)識(shí)時(shí)間和水位線生成器 159
7.3.1 認(rèn)識(shí)時(shí)間 159
7.3.2 設(shè)置時(shí)間特征 160
7.3.3 認(rèn)識(shí)水位線 161
7.3.4 內(nèi)置水位線生成器 166
7.3.5 編寫水位線生成器 167
7.4 狀態(tài) 169
7.4.1 認(rèn)識(shí)狀態(tài) 169
7.4.2 使用算子狀態(tài) 172
7.4.3 認(rèn)識(shí)鍵控流 173
7.4.4 使用鍵控狀態(tài) 174
7.5 狀態(tài)持久化 178
7.5.1 檢查點(diǎn) 178
7.5.2 狀態(tài)快照 180
7.5.3 保存點(diǎn) 182
7.5.4 狀態(tài)后端 182
7.5.5 比較快照、檢查點(diǎn)、保存點(diǎn)和狀態(tài)后端 184
7.6 旁路輸出 184
7.6.1 認(rèn)識(shí)旁路輸出 184
7.6.2 【實(shí)例32】輸出多條旁路數(shù)據(jù)流 186
7.7 數(shù)據(jù)處理語義 187
7.7.1 認(rèn)識(shí)數(shù)據(jù)處理語義 187
7.7.2 兩階段提交 188
7.7.3 Flink“兩階段提交”的事務(wù)性寫入 189
7.8 【實(shí)例33】自定義事件時(shí)間和水位線 191
-
第8章 使用狀態(tài)處理器API——State Processor API 193
8.1 認(rèn)識(shí)狀態(tài)處理器API 193
8.2 將應(yīng)用程序狀態(tài)映射到DataSet 194
8.3 讀取狀態(tài) 194
8.3.1 讀取算子狀態(tài) 194
8.3.2 讀取鍵控狀態(tài) 196
8.4 編寫新的保存點(diǎn) 198
8.5 修改保存點(diǎn) 200
8.6 【實(shí)例34】使用狀態(tài)處理器API寫入和讀取保存點(diǎn) 201
-
第9章 復(fù)雜事件處理庫 204
9.1 認(rèn)識(shí)復(fù)雜事件處理庫 204
9.2 【實(shí)例35】實(shí)現(xiàn)3種模式的CEP應(yīng)用程序 205
9.2.1 實(shí)現(xiàn)單個(gè)模式的CEP應(yīng)用程序 205
9.2.2 實(shí)現(xiàn)循環(huán)模式的CEP應(yīng)用程序 206
9.2.3 實(shí)現(xiàn)組合模式的CEP應(yīng)用程序 207
9.3 認(rèn)識(shí)模式API 207
9.3.1 單個(gè)模式 207
9.3.2 組合模式 212
9.3.3 循環(huán)模式中的連續(xù)性 213
9.3.4 模式組 215
9.3.5 跳過策略 218
9.4 檢測(cè)模式 220
9.5 復(fù)雜事件處理庫中的時(shí)間 222
9.5.1 按照“事件時(shí)間”處理遲到事件 222
9.5.2 時(shí)間上下文 223
-
第10章 使用Table API實(shí)現(xiàn)流/批統(tǒng)一處理 224
10.1 Table API和SQL 224
10.1.1 認(rèn)識(shí)Table API和SQL 224
10.1.2 Table API和SQL程序的結(jié)構(gòu) 225
10.1.3 認(rèn)識(shí)Table API和SQL的環(huán)境 225
10.1.4 認(rèn)識(shí)計(jì)劃器——OldPlanner和BlinkPlanner 226
10.1.5 查詢和輸出表 230
10.2 Table API和SQL的“流”的概念 232
10.2.1 認(rèn)識(shí)動(dòng)態(tài)表 232
10.2.2 在Table API和SQL中定義時(shí)間屬性 238
10.2.3 流上的連接 242
10.2.4 認(rèn)識(shí)時(shí)態(tài)表 243
10.3 Catalog 244
10.3.1 認(rèn)識(shí)Catalog 244
10.3.2 【實(shí)例36】使用Java和SQL的DDL方式創(chuàng)建Catalog、Catalog數(shù)據(jù)庫與Catalog表247
10.3.3 使用Catalog API 249
10.3.4 使用Table API和SQL Client操作Catalog 251
10.4 Table API、SQL與DataStream和DataSet API的結(jié)合 252
10.4.1 從Table API、SQL到DataStream、DataSet的架構(gòu) 252
10.4.2 使用DataStream和DataSet API創(chuàng)建視圖與表 252
10.4.3 將表轉(zhuǎn)換成DataStream或DataSet 253
10.4.4 從數(shù)據(jù)類型到Table Schema的映射 255
10.4.5 【實(shí)例37】使用Table API轉(zhuǎn)換DataSet,并應(yīng)用Group算子、Aggregate算子、Select算子和Filter算子 258
10.4.6 【實(shí)例38】使用SQL轉(zhuǎn)換DataSet,并注冊(cè)表和執(zhí)行SQL查詢 259
-
第11章 使用SQL實(shí)現(xiàn)流/批統(tǒng)一處理 261
11.1 SQL客戶端 261
11.2 SQL語句 263
11.2.1 認(rèn)識(shí)SQL語句 263
11.2.2 CREATE語句 264
11.2.3 【實(shí)例39】使用CREATE語句創(chuàng)建和查詢表 270
11.2.4 查詢語句和查詢算子 271
11.2.5 DROP語句 283
11.2.6 ALTER語句 284
11.2.7 INSERT語句 286
11.2.8 SQL hints 288
11.2.9 描述語句、解釋語句、USE語句和SHOW語句 289
11.2.10 【實(shí)例40】使用描述語句描述表的Schema 291
11.2.11 【實(shí)例41】使用解釋語句解釋SQL語句的計(jì)劃 292
11.3 變更數(shù)據(jù)獲取 293
11.3.1 了解變更數(shù)據(jù)獲取 293
11.3.2 【實(shí)例42】獲取MySQL變更數(shù)據(jù) 293
11.4 認(rèn)識(shí)流式聚合 296
11.5 【實(shí)例43】使用DDL創(chuàng)建表,并進(jìn)行流式窗口聚合 299
-
第12章 集成外部系統(tǒng) 303
12.1 認(rèn)識(shí)Flink的連接器 303
12.1.1 內(nèi)置的連接器 303
12.1.2 Table&SQL的連接器 304
12.2 異步訪問外部數(shù)據(jù) 307
12.3 外部系統(tǒng)拉取Flink數(shù)據(jù) 311
12.4 認(rèn)識(shí)Flink的Kafka連接器 311
12.4.1 認(rèn)識(shí)Kafka 311
12.4.2 Kafka連接器 314
12.4.3 Kafka消費(fèi)者 314
12.4.4 Kafka生產(chǎn)者 320
12.4.5 使用Kafka時(shí)間戳和Flink事件時(shí)間 323
12.4.6 認(rèn)識(shí)Kafka連接器指標(biāo) 324
12.4.7 啟用Kerberos身份驗(yàn)證 324
12.4.8 常見問題 325
12.5 【實(shí)例44】在Flink中生產(chǎn)和消費(fèi)Kafka消息 325
12.5.1 添加Flink的依賴 325
12.5.2 自定義數(shù)據(jù)源 325
12.5.3 編寫消息生產(chǎn)者 326
12.5.4 編寫消息消費(fèi)者 327
12.5.5 測(cè)試在Flink中生產(chǎn)和消費(fèi)Kafka消息 327
-
機(jī)器學(xué)習(xí)篇
第13章 進(jìn)入機(jī)器學(xué)習(xí)世界 330
13.1 學(xué)習(xí)人工智能的經(jīng)驗(yàn) 330
13.2 認(rèn)識(shí)機(jī)器學(xué)習(xí) 331
13.3 機(jī)器學(xué)習(xí)的主要任務(wù) 332
13.3.1 分類 332
13.3.2 回歸 333
13.3.3 聚類 333
13.4 開發(fā)機(jī)器學(xué)習(xí)應(yīng)用程序的基礎(chǔ) 333
13.4.1 機(jī)器學(xué)習(xí)的概念 333
13.4.2 開發(fā)機(jī)器學(xué)習(xí)應(yīng)用程序的步驟 334
13.5 機(jī)器學(xué)習(xí)的分類 336
13.5.1 監(jiān)督式學(xué)習(xí) 336
13.5.2 無監(jiān)督式學(xué)習(xí) 336
13.5.3 半監(jiān)督式學(xué)習(xí) 336
13.5.4 增強(qiáng)學(xué)習(xí) 336
13.6 了解機(jī)器學(xué)習(xí)算法 337
13.7 機(jī)器學(xué)習(xí)的評(píng)估模型 339
13.7.1 認(rèn)識(shí)評(píng)估模型 339
13.7.2 認(rèn)識(shí)二分類評(píng)估 339
13.7.3 認(rèn)識(shí)多分類評(píng)估、聚類評(píng)估和回歸評(píng)估 342
-
第14章 流/批統(tǒng)一的機(jī)器學(xué)習(xí)框架(平臺(tái))Alink 343
14.1 認(rèn)識(shí)Alink的概念和算法庫 343
14.1.1 認(rèn)識(shí)Flink ML 343
14.1.2 Alink的架構(gòu) 343
14.1.3 Alink機(jī)器學(xué)習(xí)的過程 344
14.1.4 Alink的概念 344
14.1.5 Alink的算法庫 345
14.2 【實(shí)例45】以流/批方式讀取、取樣和輸出數(shù)據(jù)集 346
14.2.1 創(chuàng)建Alink應(yīng)用程序 346
14.2.2 按行讀取、拆分和輸出數(shù)據(jù)集 348
14.2.3 讀取、取樣和輸出Libsvm格式的數(shù)據(jù)集 349
14.2.4 讀取、取樣CSV格式的數(shù)據(jù)集 350
14.2.5 讀取、解析和輸出Kafka的數(shù)據(jù)集 351
14.3 【實(shí)例46】使用分類算法實(shí)現(xiàn)數(shù)據(jù)的情感分析 353
14.3.1 認(rèn)識(shí)邏輯回歸算法 353
14.3.2 讀取數(shù)據(jù)并設(shè)置管道 354
14.3.3 訓(xùn)練模型和預(yù)測(cè) 355
14.3.4 保存、查看和復(fù)用模型 356
14.4 【實(shí)例47】實(shí)現(xiàn)協(xié)同過濾式的推薦系統(tǒng) 357
14.4.1 了解訓(xùn)練集 357
14.4.2 實(shí)現(xiàn)機(jī)器學(xué)習(xí)應(yīng)用程序 357
14.4.3 測(cè)試推薦系統(tǒng) 359
-
項(xiàng)目實(shí)戰(zhàn)篇
第15章 【實(shí)例48】使用大數(shù)據(jù)和機(jī)器學(xué)習(xí)技術(shù)實(shí)現(xiàn)一個(gè)廣告推薦系統(tǒng) 362
15.1 了解【實(shí)例架構(gòu) 362
15.1.2 【實(shí)例架構(gòu) 362
15.1.2 廣告推薦流程 363
15.1.3 機(jī)器學(xué)習(xí)流程 364
15.2 了解推薦系統(tǒng) 364
15.2.1 什么是推薦系統(tǒng) 364
15.2.2 推薦系統(tǒng)的分類 365
15.2.3 推薦系統(tǒng)的排序算法 366
15.2.4 召回算法 367
15.3 認(rèn)識(shí)在線學(xué)習(xí)算法 367
15.3.1 離線訓(xùn)練和在線訓(xùn)練 367
15.3.2 在線學(xué)習(xí)算法FTRL 368
15.4 實(shí)現(xiàn)機(jī)器學(xué)習(xí) 369
15.4.1 處理數(shù)據(jù) 369
15.4.2 特征工程 370
15.4.3 離線模型訓(xùn)練 371
15.4.4 在線模型訓(xùn)練 371
15.4.5 在線預(yù)測(cè) 372
15.4.6 在線評(píng)估 372
15.5 實(shí)現(xiàn)接入服務(wù)層 374
15.5.1 了解接入服務(wù)層 374
15.5.2 在Alink中發(fā)送預(yù)測(cè)數(shù)據(jù) 374
15.5.3 實(shí)現(xiàn)廣告服務(wù)器接收預(yù)測(cè)數(shù)據(jù) 375
15.6 日志打點(diǎn)和監(jiān)測(cè) 376
-
附 錄 377
難懂概念介紹 377
Flink常見問題匯總 378
Alink常見問題匯總 381