大數據時代的資料庫處理:Spark SQL親自動手做(熱銷版) | 被動收入的投資秘訣 - 2024年11月
大數據時代的資料庫處理:Spark SQL親自動手做(熱銷版)
全書分為4篇,共9章,第一篇講解Spark SQL 發展歷史和開發環境搭建。第二篇講解Spark SQL 實例,幫助讀者掌握Spark SQL的入門操作,瞭解Spark RDD、DataFrame和DataSet,並熟悉 DataFrame 各種操作。第三篇講解基於WiFi探針的商業大數據分析專案,實例中包含資料獲取、預處理、存儲、利用Spark SQL 挖掘資料,一步步帶領讀者學習Spark SQL強大的資料採擷功能。第四篇講解Spark SQL 最佳化的知識。
適用:Spark初學者、Spark資料分析人員以及Spark程式開發人員,也可作為大專院校和培訓機構等相關專業的師生教學參考。
本書特色
Spark SQL是 Spark大數據框架的一部分,支援使用標準SQL查詢和HiveQL來讀寫資料,可用於結構化資料處理,並可以執行類似SQL的Spark資料查詢,有助於開發人員更快地建置和執行Spark程式。
作者簡介
紀涵
資料採擷、雲計算愛好者,曾負責多個中小型網站的開發維護工作,參與開發設計多款面向校園服務的App,與多個基於Hadoop、Spark平台的大數據應用,現主要研究方向為機器學習、資料採擷。
第一部分 入門篇
1初識Spark SQL
1.1 Spark SQL的前世今生
1.2 Spark SQL能做什麼
2 Spark安裝、程式設計環境架設以及包裝傳送
2.1 Spark的簡易安裝
2.2 準備撰寫Spark應用程式的IDEA環境
2.3 將撰寫好的Spark應用程式套件裝成jar傳送到Spark上
第二部分 基礎篇
3 Spark上的RDD程式設計
3.1 RDD基礎
3.2 RDD簡單實例—wordcount
3.3 建立RDD
3.4 RDD操作
3.5 向Spark傳遞函數
3.6 常見的轉化操作和行動操作
3.7 深入了解RDD
3.8 RDD 快取、持久化
3.9 RDD checkpoint容錯機制
4 Spark SQL程式設計入門
4.1 Spark SQL概述
4.2 Spark SQL程式設計入門範例
5 Spark SQL的DataFrame操作大全
5.1 由JSON檔案產生所需的DataFrame物件
5.2 DataFrame上的行動操作
5.3 DataFrame上的轉化操作
6 Spark SQL支援的多種資料來源
6.1 概述
6.2 典型結構化資料來源
第三部分 實作篇
7 Spark SQL 工程實戰之以WiFi探針為基礎的商業大數據分析技術
7.1 功能需求
7.2 系統架構
7.3 功能設計
7.4 資料庫結構
7.5 本章小結
8 第一個Spark SQL應用程式
8.1 完全分散式環境架設
8.2 資料清洗
8.3 資料處理流程
8.4 Spark程式遠端偵錯
8.5 Spark的Web介面
8.6 本章小結
第四部分 最佳化篇
9 讓Spark程式再快一點
9.1 Spark執行流程
9.2 Spark記憶體簡介
9.3 Spark的一些概念
9.4 Spark程式設計四大守則
9.5 Spark最佳化七式
9.6 解決資料傾斜問題
9.7 Spark 執行引擎Tungsten 簡介
9.8 Spark SQL解析引擎Catalyst 簡介
9.9 本章小結
前言
我們處於一個資料爆炸的時代!
大量湧現的智慧型手機、平板、可穿戴裝置及物聯網裝置每時每刻都在產生新的資料,然而帶來革命性變革的並非巨量資料本身,而是我們如何從這些資料中採擷到有價值的資訊,來輔助我們做出更加智慧的決策。我們知道,在生產環境下,所謂的大數據常常是由數千萬筆、上億筆具有多個預先定義欄位的資料單元組成的資料集,是不是很像傳統關聯式資料庫的二維資料表呢?那麼我們是否也能找到一個像SQL 查詢那樣簡便的工具來高效率地分析處理大數據領域中的巨量結構化資料呢?沒錯,這個工具就是Spark SQL。
Spark SQL 是Spark 用來操作結構化資料的進階模組,在程式中透過引用SparkSQL 模組,我們便可以像從前在關聯式資料庫利用SQL(結構化查詢語言)分析關聯式資料庫表一樣簡單快速地在Spark 大數據分析平台上對巨量結構化資料進行快速分析,而Spark 平台隱藏了底層分散式儲存、計算、通訊的細節以及作業解析、排程的細節,使開發者僅需關注如何利用SQL 進行資料分析的程式邏輯就可以方便地操控叢集來分析我們的資料。
本書內容
礎篇、實作篇、最佳化篇,所有程式均採用簡潔而優雅的Scala 語言撰寫,Spark 架構也是使用Scala 語言撰寫的。
第一部分 入門篇(第1、2 章)
第1 章簡介Spark 的誕生、Spark SQL 的發展歷史以及Spark SQL 的用處等內容,讓讀者快速了解Spark SQL 背景知識,為以後的學習奠定基礎。
第2 章透過說明Spark SQL 開發環境的架設、Spark 作業的包裝傳送、常見問題的解答,並結合大量圖示,讓讀者快速掌握開發環境的架設以及傳送應用程式到叢集上,為後面章節的學習奠定堅實的基礎。
第二部分 基礎篇(第3、4、5、6 章)
第3 章是真正開始學習Spark SQL 必要的先修課,詳盡地介紹Spark 架構對資料的核心抽象--RDD(彈性分散式資料集)的各方面。先介紹與RDD 相關的基本概念,例如轉化操作、行動操作、惰性求值、快取,說明的過程伴隨著豐富的範例,加強讀者對RDD 的了解與RDD 程式設計基礎。在說明RDD 中基礎內容的同時,又深入地剖析了疑點、困難,例如RDD Lineage(RDD 相依關係圖)、向Spark 傳遞函數、對閉包的了解等。在之前對基本類型RDD 的學習基礎上,又引用了對特殊類別RDD-- 鍵值對RDD 的大致介紹,在鍵值對RDD介紹中對combineByKey 操作的說明,深入地從程式實現的角度洞悉了Spark分散式運算的實質,幫助對RDD 具有濃厚興趣的讀者做進一步的擴充。最後,站在RDD 設計者的角度重新檢查RDD 快取、持久化、checkpoint 機制,進一步詮釋RDD 為什麼能夠極佳地適應大數據分析業務的特點,有天然強大的容錯性、易恢復性和高效性。
第4 章對Spark 進階模組--Spark SQL, 也就是本書的主題, 進行簡明扼要的概述,並說明對應的Spark SQL 程式設計基礎。先是透過與前一章所學的Spark 對資料的核心抽象--RDD 的比較,引出Spark SQL 中核心的資料抽象--DataFrame,說明兩者的異同,點明Spark SQL 是針對結構化資料處理的進階模組的原因,在於其內建豐富結構資訊的資料抽象。後一部分透過豐富的範例說明如何利用Spark SQL 模組來程式設計的主要步驟,舉例來說,從結構化資料來源中建立DataFrames、DataFrames 基本操作以及執行SQL 查詢等。
第5、6 章屬於Spark SQL 程式設計的進階內容,也是我們將Spark SQL 應用於生產、科學研究計算環境下,真正開始分析多類別資料來源、實現各種複雜業務需求必須要掌握的知識。第5 章,以包含簡單且典型的學生資訊表的JSON 檔案作為資料來源,深入對DataFrame 豐富強大的API 進行研究,以操作說明加範例的形式涵蓋DataFrame 中每一個常用的行動、轉化操作,進而幫助讀者輕鬆高效率地組合使用DataFrame 所提供的API 來實現業務需求。第6章,介紹Spark SQL 可處理的各種資料來源,包含Hive 表、JSON 和Parquet檔案等,從廣度上讓讀者了解Spark SQL 在大數據領域對典型結構化資料來源的皆可處理性,進一步讓讀者真正在工作中掌握一種結構化資料的分析利器。
第三部分 實作篇(第7、8 章)
第7 章透過說明大型商業實例專案(以WiFi 探針為基礎的商業大數據分析技術)的功能需求、系統架構、功能設計、資料庫結構,幫助讀者了解如何在實際開發中應用Spark SQL 處理結構化資料,加強讀者的工程思維,同時為第8章的學習做好準備。
第8 章透過說明分散式環境架設以及專案程式的解析,幫助讀者進一步了解Spark SQL 應用程式的執行過程,在後一部分介紹Spark SQL 程式的遠端偵錯方法和Spark 的Web 介面,幫助讀者更加方便地了解程式的執行狀態。
第四部分 最佳化篇(第9 章)
最佳化篇由第9 章組成,本篇從Spark 的執行流程到記憶體以及工作的劃分,再到Spark 應用程式的撰寫技巧,接著到Spark 本身的最佳化,最後引出資料傾斜的解決想法,層層遞進,逐步解析Spark 的最佳化思想。最後,以對Spark 執行引擎Tungsten 與Spark SQL 的解析引擎Catalyst 的介紹作為本部分的結尾。筆者將在本篇中帶領讀者掌握Spark 的最佳化方式以及思想,讓Spark 程式再快一點。
繁體中文版注意事項
為維持原作者內容,本書部分畫面會保留原作者之簡體中文介面,請讀者自行參照內文對照。
本書適合讀者
本書適合於學習資料採擷、有巨量結構化資料分析需求的大數據從業者及同好閱讀,也可以作為大專院校相關科系的教材。建議在學習本書內容的過程中,理論結合實務,獨立進行一些程式的撰寫,採取開放式的實驗方法,即讀者自行準備實驗資料和實驗環境,解決實際問題,最後達到理論結合實務的目的。
本書在寫作過程中獲得家人以及編輯的大力支持,在此對他們一併表示感謝。本書由紀涵(負責基礎篇的撰寫)主筆,其他參與著作的還有靖曉文(負責實作篇的撰寫)、趙政達(負責入門篇、最佳化篇的撰寫),排名不分先後。