天津11选5开奖记录 www.zmkeue.com.cn 機器學習(ML)庫正變得越來越流行,現在有各種各樣的這類庫 – 維基百科中提及了49個。 這些機器學習庫需要龐大的數據,通常此類數據是存儲在關系型數據庫中的業務數據,比如存放在EsgynDB或以其他形式存儲在Hadoop數據湖中。

簡單的集成 JDBC和HDFS

有多種方法連接機器學習庫和EsgynDB。 其中一種方法是使用JDBC,這是大多數軟件包支持的方法。 用戶在他們選擇的系統上運行機器學習代碼并通過JDBC讀取數據。 如果要傳輸大量數據,可以通過多個并行連接讀取。 某些系統可以通過將SQL查詢拆分為多個實例來解決此問題。 例如,Spark jdbcRDD允許查詢的參數化,再結合salted EsgynDB表能更高效的工作:

Apache Spark將使用non-overlapping值范圍啟動此查詢的多個實例。

相反地從機器學習庫到EsgynDB的結果集數據,通??山蕕汲齙紿DFS的Hive表來完成,然后由EsgynDB讀取此Hive表。

在EsgynDB集群上的并行機器學習實例

在這篇博客中,我們重點關注另一種集成方法,即在EsgynDB集群上并行運行機器學習庫程序,將EsgynDB中數據作為輸入并同時在EsgynDB中處理結果。 對于不同的機器學習庫,該方法是通用的,它類似于MapReduce,機器學習程序被構造成多個類似于mapper或reducer的???。

三大處理???/b>

為了創建這樣的設置,我們結合了三大處理??椋?/p>

首先,機器學習程序將data frame作為輸入并產生data frame作為輸出。 該程序編寫類似MapReduce中的mapper或reducer,所以以上程序的多個實例可以并行運行,而無需在實例之間交換狀態信息。 例如,程序可以對邏輯上獨立的數據運行聚類算法。

Data frame是幾個ML包中涉及的概念,它大致相當于SQL中的一個表。 Data frame由指定數據類型的命名列組成。 因為每列具有相同數量的元素,它們可以組成多個行。

第二個??槭怯蒃sgyn為Apache Trafodion提供的用戶定義的表值函數(TMUDF),它把機器學習程序與EsgynDB集成到一起。 以文本形式將所需數據提供給機器學習程序的標準輸入,并以文本形式接收該程序的輸出結果。 許多機器學習庫都內置支持以逗號分隔(或以其他方式分隔)格式讀取和寫入data frame。

最后,我們添加一個驅動查詢(driving?query)來完整機器學習場景。 該驅動查詢產生機器學習程序所需的數據,調用用戶定義函數(UDF),并以用戶期望的方式處理UDF的結果。 當機器學習程序像reducer一樣工作時,驅動查詢還定義了如何進行數據分區。 如果機器學習庫不支持可橫向擴展集群(例如R),這可以讓您在更大的數據集上并行地運行算法。

例子:TensorFlow神經網絡

以Google TensorFlow 中識別手寫數字作為神經網絡示例,我們在一臺單獨的機器上訓練這個神經網絡,然后將它部署到EsgynDB,我們用EsgynDB來并行讀取數字。 此示例的驅動SQL查詢如下:

集成的UDF稱之為“filterprog”,它的調用用紅色標注。藍色部分為輸入數據,向量化圖像。查詢返回圖像編號并讀取數字作為結果。

TensorFlow程序從標準輸入讀取圖像編號和圖像數據,執行圖像識別,然后將讀取的數字和圖像編號打印到標準輸出,由EsgynDB讀取它們。 EsgynDB優化器根據需要可并行化查詢。

請注意該操作可以集成更復雜的SQL查詢,比如在機器學習代碼之前和之后執行join,union,聚合等操作,并且 多個機器學習步驟可以合并成單個的驅動查詢。