開源最前線(ID:OpenSourceTop) 猿妹編譯
連結:https://towardsdatascience.com/trying-polynote-from-netflix-a-better-notebook-for-data-engineers-5107277ff2e5、https://medium.com/netflix-techblog/open-sourcing-polynote-an-ide-inspired-polyglot-notebook-7f929d3f447
近日,Netflix宣布開源Polynote,Polynote是Netflix自家使用的多語言筆記本環境,Polynote為數據科學家和機器學習研究人員提供了一個筆記本環境,允許他們將基於JVM的ML平台(此類平台大多使用Scala構建)與Python生態系統中流行的機器學習和可視化庫無縫集成。
它已經在Netflix內部廣泛使用,而且Netflix正在研究如何將Polynote和其他平台集成,下面一起詳細來看看Polynote有哪些牛掰的功能特性:
功能概述
可重複性
Polynote的兩個指導原則是可複製性和可見性。為了實現這兩大特性,我們最早的設計決策之一是從頭開始構建Polynote的代碼解釋,而不是像傳統筆記本一樣依賴REPL。
我們認為,儘管REPL總體上不錯,但它們根本不適合筆記本電腦。為了了解REPL和筆記本的問題,讓我們看一下典型筆記本環境的設計。
筆記本是單元格的有序集合,每個單元格可以保存代碼或文本。每個單元格的內容可以獨立修改和執行。單元格可以重新排列,插入和刪除。這還可以取決於筆記本電腦中其他單元的輸出。
將此與REPL環境進行對比會發現。在REPL會話中,用戶把表達式一次一個地輸入提示符。一旦求值,表達式及其求值結果是不可變的,求值結果將附加到下一個表達式可用的全局狀態。
不幸的是,這兩個模型之間的脫節意味著一個典型的notebook環境,它使用一個REPL會話來評估單元代碼,當用戶與notebook交互時,會導致隱藏狀態積累。單元可以按任何順序執行,從而改變這種全局隱藏狀態,從而影響其他單元的執行。通常情況下,筆記本無法從頂部可靠地重新運行,這使得它們很難複製並與他人共享。這種隱藏狀態也讓用戶很難推斷筆記本上運行了什麼。
在其他筆記本中,隱藏狀態意味著一個變量在其單元格被刪除後仍然可用。
在 Polynote 筆記本中,沒有隱藏狀態,被刪除的單元格變量不再可用。
從頭編寫Polynote的代碼解釋允許我們消除這種全局的、可變的狀態。通過跟蹤每個單元中定義的變量,Polynote根據在其上運行的單元構建給定單元的輸入狀態。使單元格的位置在其執行語義中變得重要,這也加強了最小驚奇原則,允許用戶從上到下閱讀筆記本。它通過讓筆記本持續運行,從而確保其可重複性。
編輯改進
Polynote提供了諸如交互式自動完成和參數提示、錯誤高亮顯示以及支持LaTeX富文本編輯器等類似ide的特性。
可見性
Polynote UI通過顯示內核狀態、突出顯示當前正在運行的單元代碼和當前正在執行的任務,從而讓用戶對內核狀態的直觀了解。
多語言
筆記本中的每個單元格都可以用不同的語言編寫,變量可以在它們之間共享。目前支持Scala、Python和SQL語言類型。
依賴項和配置管理
Polynote 將配置和依賴項信息直接存入筆記本,而不依賴於外部文件或集群 / 伺服器級別的配置。
數據可視化
本機數據探索和可視化幫助用戶了解更多關於他們的數據,而不會弄亂他們的筆記本。與matplotlib和Vega的集成允許高級用戶通過漂亮的可視化效果進行交互
接下來,我們將更深入地了解Polynote的功能:
安裝
安裝過程是按照它的指南文檔進行的,我還安裝了matplotlib
pip3 install matplotlib
如果你打算嘗試它的多語言功能,則需要再添加一個環境變量:
export PYSPARK_ALLOW_INSECURE_GATEWAY=1
如果沒有,你就會收到以下提示:
編輯體驗
使用筆記本級別的「配置和依賴項」設置可以輕鬆地從maven存儲庫中提取依賴項,包括使用HTTP get從Netflix博客獲取文本的請求:
自動完成功能適用於從Maven存儲庫中提取的庫:
但是,lambda函數的自動完成功能似乎不起作用:
Spark示例
在這個字數統計示例中,我們從HTTP獲取文本,對其進行標記,並保留所有大於4個字符的標記。
Spark也可以輕鬆配置「配置和依賴」設置:
切換到Python
現在,我們切換到python,使用panda和matplotlib來繪製條形圖,只選取前10個單詞。
運行還算順利,但是有時候會彈出以下警告:
當這種情況發生時,接口停止工作,惟一的解決方法就是終止Polynote進程並重啟。
Polynote是迄今為止我嘗試過的Spark和Scala最好的筆記本。雖然有些小故障,但是我相信很快就會修復
目前,Polynote已經在GitHub上標星2.9K,209個Fork(GitHub地址:https://github.com/polynote/polynote)如果對這個項目感興趣,可以直接訪問GitHub的原始碼進行嘗試