還有比 Jupyter 更好用的工具?看看 Netflix 發布的這款
- 2019 年 11 月 12 日
- 筆記

文末贈送三本深度學習書

近日,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.6K,177個Fork(GitHub地址:https://github.com/polynote/polynote)如果對這個項目感興趣,可以直接訪問GitHub的源程式碼進行嘗試
本文分享自:開源最前線(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