Netflix現在對外開源,自家個人化與推薦團隊所使用的多語言筆記本環境Polynote,Polynote良好支援Scala,並且與Apache Spark整合,也提供了Scala、Python和SQL等語言的互操作性,以及自動程式碼完成等功能。

Polynote可為資料科學家或是機器學習研究人員,提供一個緊密整合JVM機器學習平臺的筆記本環境,在主要Scala的開發工作中,同時使用Python的機器學習與視覺化函式庫。

Polynote的出現,源自於Netflix對於筆記本開發環境的需求,Netflix提到,現在的筆記本工具缺乏對Scala的支援,雖然Python開發人員,習慣使用較少相依項目的套件管理器,但是Scala開發人員通常需要使用能夠管理數百相依項目衝突的建置工具。另外,Netflix也希望在使用Spark時,開發人員可以在叢集運算環境中,無論使用任何一個節點,可以確保分散式程式碼,皆能在一致的環境中執行。

而且Netflix開發人員也認為,使用筆記本編輯程式碼的體驗很糟,尤其是與IntelliJ IDEA以及Eclipse工具比較之後,Netflix提到,筆記本的執行是程式碼的特定片段,在特定時間點於特定環境中執行的一筆紀錄,這個紀錄文件包含了程式碼、資料和執行結果,這樣的方式讓筆記本功能強大,卻也很難再次重現執行過程。

另外,Netflix在機器學習領域,有多語言的需求,因為機器學習開發工作,通常需要使用多種開發語言,像是研究人員可能使用Scala和Spark產生訓練資料,並以Python機器學習函式庫諸如Tensorflow或是scikit-learn進行實際訓練,支援多語言開發,可讓開發人員不用在各種工具間切換。

Netflix受IDE啟發,並且根據自身需求開發了Polynote筆記本,Netflix重新設計Polynote對程式碼解釋,不像傳統筆記本仰賴REPL(Read-Eval-Print Loop)模型。Netflix提到,由於筆記本的程式碼輸入以儲存格(Cell)為單位,每個儲存格可重新排列、插入和刪除,而儲存格內容可以獨立修改和執行,當以REPL模型評估儲存格,則可能產生隱藏的狀態,由於儲存格可以用任何順序執行,因此可能影響其他儲存格的執行,但是Polynote在執行時,會把儲存格的位置列入考量,以消除傳統筆記本難以從頭開始執行的不良作法。

Polynote還可提供許多IDE的功能,像是互動式自動完成以及參數提示,也能顯示內聯錯誤提示,而且其文字編輯器還支援LaTeX。 Polynote中的UI會顯示核心狀態,並突出顯示正在執行的儲存格程式碼,還有正在執行的任務,供開發者了解核心現況。

特別的是,Polynote支援多語言互通,每個儲存格都可以編寫不同的開發語言,而且之間還能夠共享變數,目前支援Scala、Python和SQL。Polynote會儲存配置和相依性的設定,並為Spark開發人員解決一些常見的相依性問題。

在資料視覺化方面,Polynote整合了兩個熱門的開源視覺化函式庫Vega和Matplotlib,Matplotlib在筆記本工具中是很標準的工具,而Polynote則又同時原生支援了資料探索功能,包括資料架構檢視、表格查看工具以及Vega函式庫。


Advertisement

更多 iThome相關內容