我在 Azure Databricks 中有一個比較大的專案,很快就會投入生產。代碼目前被組織在存盤庫中的幾個檔案夾中,任務是使用 ADF 觸發的,作業集群一個接一個地執行筆記本。筆記本有一些硬編碼值,如輸入路徑、輸出路徑等。
我不認為這是最好的方法。
我想擺脫硬編碼值并依賴一些環境變數/環境檔案/環境類或類似的東西。
我正在考慮創建一些類,這些類將具有帶有個人轉換和轉換之外的保存操作的方法。你能給我一些建議嗎?如何在 Databricks 中從另一個腳本中參考一個 Scala 腳本?我應該創建一個 JAR 嗎?
或者您可以將我推薦給一些檔案/好的公共存盤庫,在那里我可以看到它應該如何完成?
uj5u.com熱心網友回復:
很難寫出一個關于如何去刺激的易于理解的指南,但這里有一些我希望我早點知道的事情。
生產時:
- 一旦您建立了完善的流程,請嘗試遷移到jar 作業。
Notebooks 用于探索性任務,不推薦用于長時間運行的作業。
您可以將引數傳遞給您的main、讀取環境變數或讀取 spark 配置。如何傳遞配置取決于您。 - 選擇
New Job Cluster和避免All Purpose Cluster。
在生產中,Databricks 建議使用新集群,以便每個任務都在完全隔離的環境中運行。的定價不同New Job Cluster。我會說它最終會更便宜。 - 這是處理秘密的方法
.. 以及其他一些離題的想法:
- 我建議查看CI\CD Jenkins 食譜
- 使用Databricks cli自動部署
uj5u.com熱心網友回復:
如果您在代碼中使用筆記本,那么最好將代碼拆分為以下幾部分:
- 具有“庫函式”(“庫筆記本”)的筆記本 - 僅定義將轉換資料的函式。這些函式通常只是接收 DataFrame 一些引數,執行轉換并回傳新的 DataFrame。這些函式不應該讀/寫資料,或者至少不應該有硬編碼的路徑。
- 作為作業入口點的筆記本(我們稱它們為“主”)——它們可能通過小部件接收一些引數,例如,您可以傳遞環境名稱(prod/dev/staging)、檔案路徑等。這些“主”筆記本可能包括使用
%run相對路徑的“圖書館筆記本” ,例如%run ./Library1,,%run folder/Libray2(參見檔案) - 用于測驗的筆記本 - 它們還包括“庫筆記本”,但添加了呼叫函式和檢查結果的代碼。通常你需要有專門的庫,比如spark-testing-base(Scala 和 Python)、chispa(僅限 Python)、spark-fast-tests(僅限 Scala)等來比較 DataRrames、模式等的內容。 (這里是使用不同庫的示例)這些測驗筆記本可以作為常規作業或從 CI/CD 管道觸發。為此,您可以使用Databricks CLI或dbx 工具(Databricks CLI 的包裝器)。我有一個帶有 notebooks 的 CI/CD 管道演示,盡管它是用于 Python 的。
對于筆記本,建議使用Repos功能,該功能允許一次對多個筆記本執行版本控制操作。
根據代碼的大小以及更改的頻率,您還可以將其打包為一個庫,該庫將附加到集群中,并在“主筆記本”中使用。在這種情況下,測驗該庫函式可能會更容易一些 - 您可以只使用標準工具,例如 Maven、SBT 等。
PS 您還可以聯系分配給您帳戶的解決方案架構師(如果有),并更詳細地討論該主題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/387356.html
標籤:斯卡拉 阿帕奇火花 火花 数据块 azure-databricks
下一篇:使用Scala從URL中提取域
