你有沒有試過讓電子表格做工廠輸送帶的工作?幾年前的夏天,我就是這樣做的,試圖用一台像暴風雨中的吉娃娃一樣嗚咽的筆記型電腦來處理數百萬個日誌檔案。那時有人說:「你試過 Databricks 嗎?」 提示音效響起。
如果「Spark」、「叢集」和「Delta Lake」這些詞讓你想要逃之夭夭,好消息是:使用 Databricks 不必感覺像駕駛火箭。把它想像成資料人員共用的廚房——廚師(你和你的團隊)可以帶來食材(資料),使用爐具(運算叢集),並按照食譜(筆記本)烹調出真正能餵飽業務的餐點(分析、儀表板、機器學習模型)。
在本指南中,我們將設定你的工作區、啟動你的第一個叢集、在筆記本中編寫程式碼、使用 SQL 查詢、將結果儲存到 Delta 表格中、排程工作,並避免兩個經典的陷阱:意外帳單和神秘的「為什麼我的工作失敗了?」之夜。我會盡量保持人性化、實用和誠實——就像兩個鄰居隔著籬笆交換技巧一樣,只是籬笆是用 parquet 檔案做的。
Databricks 到底是什麼?
將 Databricks 想像成一個用於大數據和 AI 的多合一工作室。它將 Apache Spark 包裝在一個友好的介面中,新增協作筆記本,使用 Delta Lake(一種超強表格格式)管理資料,並為你提供治理工具,這樣你就不會不小心讓資料水龍頭徹夜開啟。你可以編寫 Python、SQL、Scala 或 R;混合搭配;並邀請團隊成員在同一個筆記本中工作,而不會互相推擠。
你的心智模型
- 工作區:你的專案總部——使用者、筆記本、儲存庫、工作。
- 運算:叢集(用於筆記本和工作)和 SQL 倉儲(用於 BI/SQL 查詢)。
- 儲存:你的雲端資料 (S3/ADLS/GCS)。Databricks 新增了一個友好的目錄,其中包含你可以查詢的表格。
- 治理:存取控制和 Unity Catalog,以便正確的人員看到正確的資料。
- 管線:用於資料工程的 Delta Live Tables;用於排程內容的工作;用於實驗和模型的 MLflow。
步驟 1:建立或加入工作區
如果你的公司已經有 Databricks,你會收到邀請。否則,請註冊試用版(選擇你喜歡的雲端)並建立一個工作區。你會進入一個乾淨的左側邊欄介面。不要對這些選項感到恐慌——我們將從 Workspace、Compute 和 Data 這三個開始。
步驟 2:啟動你的第一個叢集(底層的「引擎」)
叢集只是一堆 Databricks 為你啟動的雲端機器。
- 點擊 Compute → New Cluster。
- 選擇一種叢集模式(從 Single user 或 Shared 開始進行測試)。
- 開啟自動終止(例如,15-30 分鐘)。這是雲端的「關燈」計時器。
- 建立。等待一兩分鐘;你會看到一個綠色的「Running」。
Pogue 提示:將你的叢集命名為顯而易見的名稱(「dev-pogue-15min-autoterm」)。未來的你會感謝你的。
步驟 3:開啟筆記本(你的「工作台」)
- Workspace → New → Notebook。
- 選擇一種語言。Python 是一個舒適的起點;你仍然可以使用 magic commands 執行 SQL。
- 將筆記本附加到你正在執行的叢集(頂部的下拉式選單)。
試試你的第一個儲存格:
print("Hello, Databricks!")
然後試試 Spark 的預告片:
spark.range(5).show
恭喜,你剛剛啟動了一個分散式運算引擎來數到五。你正式成為一名資料巫師。
步驟 4:匯入資料(「食材架」)
你可以匯入檔案、連線到物件儲存,或查詢現有表格。
- 點擊側邊欄中的 Data。你會看到目錄和結構描述(表格的資料夾),以及新增資料的選項。
- 如果你有一個 CSV 檔案,請上傳它以進行快速測試。Databricks 可以推斷結構描述。
使用 Python 讀取雲端儲存中的 CSV 檔案:
df = spark.read.option("header", True).csv("/mnt/my-bucket/sales.csv")
df.printSchema
df.limit(10).display
該 display 函數是 Databricks 的魔力:輕鬆排序、篩選和繪製圖表。
步驟 5:將你的結果儲存為 Delta 表格(為什麼要選擇 Delta?)
Delta 表格就像具有超能力的電子表格:它們保持交易保證(「ACID」)、追蹤版本,並使更新/插入/合併變得理智。
df.write.mode("overwrite").format("delta").saveAsTable("analytics.sales_clean")
現在你可以使用 SQL 查詢:
-- 使用 %%sql 將你的儲存格切換到 SQL
%%sql
SELECT product, SUM(amount) AS total
FROM analytics.sales_clean
GROUP BY product
ORDER BY total DESC
想要易於稽核、版本化的資料?你可以時間旅行:
%%sql
SELECT * FROM analytics.sales_clean VERSION AS OF 2
步驟 6:與 SQL 倉儲交朋友(適用於 BI 人員)
如果你主要進行儀表板和業務問題,請啟動一個 SQL Warehouse (Compute → SQL Warehouses)。它就像一個針對 SQL 進行調整的更輕量級的引擎。
- 連線你的 BI 工具(Power BI、Tableau 或 Databricks SQL Dashboard)。
步驟 7:使用 Delta Live Tables 建立管線(從「手動」到「自動」)
如果你有可重複的轉換——「清理原始銷售資料、加入產品元資料、按週彙總」——Delta Live Tables (DLT) 會將其轉變為具有檢查和沿襲的受管理管線。
一個小的 SQL DLT 範例:
CREATE OR REFRESH LIVE TABLE sales_clean AS
SELECT * FROM cloud_files('/mnt/data/sales_raw', 'csv');
CREATE OR REFRESH LIVE TABLE weekly_sales AS
SELECT product, weekofyear(date) AS week,
SUM(amount) AS weekly_total
FROM LIVE.sales_clean
GROUP BY product, week;
- 新增期望(例如「amount >= 0」),以便錯誤的資料大聲失敗,而不是悄悄地破壞你的季度。
步驟 8:使用 Jobs 排程它(因為你喜歡睡覺)
- 選擇你的筆記本,設定一個排程(例如,每天凌晨 2 點),選擇一個小的 job cluster。
獎勵:參數化筆記本,以便相同的程式碼可以使用不同的輸入在開發/測試/生產環境中執行。
步驟 9:沒有眼淚的權限和治理
資料存取控制很重要。使用內建的目錄權限來確保正確的讀者、寫入者和擁有者。如果你的組織使用集中式中繼儲存庫,你會遇到 Unity Catalog:它標準化了像 catalog.schema.table 這樣的名稱,並為你提供更好的稽核和細粒度控制。
Pogue 提示:從簡單開始——一個用於分析的目錄,一個用於沙箱的目錄——並清楚地命名事物。未來的分析師會請你喝咖啡。
步驟 10:成本控制(「不要收到意外帳單」部分)
- 排程任務首選 job clusters(啟動、執行、關閉)。
- 聰明地快取:除非你需要重複使用,否則不要持久化巨大的 DataFrames。
- 監控 UI 的成本指標,並在你的雲端供應商中設定預算/警示。
一天的工作:一個快速示範
假設你的老闆問:「哪些產品線在本季度增長最快?」這是 Databricks 的流程:
- 擷取銷售和產品元資料(雲端儲存中的 CSV 檔案)。
- 將筆記本包裝在一個 Job 中,以便每天早上重新整理。
疑難排解角落(因為它會發生)
- 叢集無法啟動:檢查你的配額/執行個體類型;嘗試一個較小的 VM;確認權限。
- 資料無法讀取:驗證路徑和憑證;嘗試一個小的範例;檢查推斷的結構描述。
- 工作不斷失敗:新增日誌記錄(print 語句、display)、降低並行性,並驗證輸入。
- 結果看起來「不正常」:時區!它們很狡猾。轉換時間戳記、設定預設時區,並記錄假設。
協作:像樂隊一樣工作,而不是獨奏
- 使用 Repos 將筆記本與 Git 同步。儘早提交,經常提交。
- 直接在筆記本儲存格中新增註解。在頂部保留一個「Read Me First」儲存格,其中包含說明。
- 建立小的、可組合的筆記本(擷取、轉換、分析),以便團隊成員可以跳進來而無需探索。
Python?SQL?兩者兼具。
你可以在一個筆記本中混合語言。例如,在 SQL 中原型化你的邏輯(快速迭代),然後切換到 Python 以使用專用的函式庫(預測、NLP)。謹慎使用 UDF——原生 Spark 函數更快,並且更易於擴展。
效能:三個槓桿
- 分割區:跳過大海撈針,只讀取針。按經常篩選的欄位(日期、區域)分割 Delta 表格。
- 檔案大小:小檔案就像閃光——無處不在且令人討厭。使用最佳化寫入/自動最佳化將小檔案合併為大塊、高效的檔案。
- 快取和廣播聯結:快取重複使用的 DataFrames;在大型聯結中廣播小表格以避免洗牌。
你第二天需要了解的安全基礎知識
- 將密碼儲存在受管理的密碼範圍內;永遠不要硬式編碼金鑰。
從修補到生產:一個現實的路徑
- 第 1 週:使用筆記本和一個小的叢集探索。儲存第一個 Delta 表格。分享勝利。
- 第 2 週:為你的週期性轉換建立一個 DLT 管線。新增資料品質檢查。
- 第 3 週:將筆記本包裝到 Jobs 中,新增警示,並將儀表板連線到 SQL Warehouse。
- 第 4 週:將密碼移動到保管庫,整理權限,設定命名慣例,並記錄所有內容。
常見的神話,溫和地消除
- 「Databricks 僅適用於 Spark 大師。」 現在不是了。SQL Warehouses 和 UI 輔助工具意味著分析師可以在不編寫一行 Scala 的情況下蓬勃發展。
- 「它會很貴。」 如果你整個週末都開著體育場燈光,那可能會很貴。透過自動終止和小型 job clusters,你可以保持成本文明。
- 「版本控制令人頭痛。」 Delta 的時間旅行和表格歷史記錄使回滾和稽核變得異常平凡。
關於有用的助手的一句話
如果你發現自己陷入編寫樣板 Spark 程式碼、向…自己解釋你自己的筆記本,或將粗略的結果轉變為整潔的摘要,那麼一個聰明的副駕駛可以節省數小時。像 Sider.AI 這樣的工具可以作為友好的聊天框坐在你的瀏覽器中,幫助你起草一個入門級 PySpark 儲存格、重構笨拙的聯結,或將你的筆記本的輸出轉變為可讀的摘要,供你的老闆使用。這裡的訣竅是:提出具體的、有根據的問題(「編寫一個 PySpark 合併到 Delta 表格中,其中包含此結構描述的更新插入邏輯…」),並貼上你結構描述的一個小的、具有代表性的範例,以便建議準確無誤。如果你試圖讓它猜測一切,你們最終都會聳聳肩。 你的第一個星期:一個迷你劇本
第 1 天:建立一個工作區登入。啟動一個帶有自動終止的小型開發叢集。
第 2 天:匯入一個小的 CSV 檔案。使用 display 探索。儲存一個 Delta 表格。
第 3 天:建立一個簡單的筆記本管線:raw → clean → aggregate。新增註解。
第 4 天:切換到 SQL 以驗證結果。建立一個小的儀表板。
第 5 天:建立一個 Job 以每天重新整理。關閉叢集,準時回家。
備忘單:你實際會使用的命令
- 讀取 CSV/Parquet:spark.read.option("header", True).csv(path) / spark.read.parquet(path)
- 寫入 Delta 表格:df.write.format("delta").mode("append").saveAsTable("catalog.schema.table")
MERGE INTO target t
USING source s
ON t.id = s.id
WHEN MATCHED THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *;
- Python 中的 Autoloader(增量擷取):
df = (spark.readStream
.format("cloudFiles")
.option("cloudFiles.format", "json")
.load("/mnt/raw/events"))
df.writeStream.format("delta").option("checkpointLocation","/mnt/chk").start("/mnt/delta/events")
何時從筆記本切換到管線
- 如果你每天執行相同的筆記本,請將其移動到一個 Job 中。
- 如果你鏈接了三個或更多筆記本,請考慮 DLT——它可以簡化依賴關係並新增資料品質規則。
- 如果多個團隊依賴輸出,請使用明確的 SLA 提升到受管理的目錄。
最後一件事(Pogue 的資料重力定律)
資料具有重力。移動它很重,並且甩來甩去很昂貴。當你將運算帶到資料、保持你的表格整潔 (Delta) 並自動化無聊的部分時,Databricks 的效果最佳。從小處著手,標記所有內容,並設定那些自動終止計時器,就像你的雲端帳單取決於它一樣——因為它確實取決於它。
主要收穫
- 使用筆記本探索;將清理後的結果儲存為 Delta 表格。
- 對於可重複的轉換,請使用 DLT 並使用 Jobs 排程。
- 透過 SQL Warehouses 和儀表板分享見解。
- 當你需要提示時,請依靠副駕駛——但請保持你的提示具體。
如果你可以使用 spark.range(5).show 數到五,你就可以在 Databricks 中建立有用的東西。一旦你的夜間工作在凌晨 2 點沒有呼叫你的情況下執行,你就會知道你已經進入了那片罕見而美麗的領域,即「行為良好的資料」。
常見問題
Q1:作為初學者,開始使用 Databricks 的最快方法是什麼?
建立一個小的、自動終止的叢集,開啟一個筆記本,並載入一個小的 CSV 檔案以使用 display 探索。將你清理後的結果儲存為 Delta 表格,並嘗試一個簡單的 SQL 查詢——這可以在第一天讓你真正獲勝,而不會迷失在進階功能中。
Q2:我的管線應該使用筆記本還是 Delta Live Tables?
在你弄清楚事情時,從筆記本開始;它們非常適合探索和快速獲勝。當你的邏輯穩定並且需要可靠地執行時,請切換到 Delta Live Tables 以獲得受管理的依賴關係、資料品質檢查和更輕鬆的監控。
Q3:我如何控制 Databricks 的成本?
為開發使用小型執行個體,啟用自動終止,並為排程的執行首選 job clusters。避免持久化巨大的 DataFrames,除非必要,並密切關注成本指標和雲端預算,這樣就不會有任何東西運行整個週末。
Q4:非程式設計師可以有效地使用 Databricks 嗎?
可以——SQL Warehouses 加上儀表板使 Databricks 對分析師來說很友好。你可以編寫簡單的 SQL、視覺化結果,並分享見解,而無需接觸 PySpark,然後僅在需要更重的轉換時才引入工程師。
Q5:將資料儲存為 Delta 表格的優勢是什麼?
Delta 表格為你提供 ACID 交易、版本歷史記錄(時間旅行)和更好的效能。這意味著更安全的更新、在出現問題時更容易回滾,以及對相同資料的更快查詢。