江苏快3机器学习(ML)库正变得越来越流行,现在有各种各样的这类库 – 维基百科中提及了49个。 这些机器学习库需要庞大的数据,通常此类数据是储备在关系型数据库中的业务数据,比如存放在EsgynDB或以其他形式储备在Hadoop数据湖中。

简单的集成 JDBC和HDFS

有多种方法连接机器学习库和EsgynDB。 其中一种方法是使用JDBC,这是大多数软件包支持的方法。 用户在他们挑选的系统上运行机器学习代码并通过JDBC读取数据。 如果要传输大量数据,可以通过多个并行连接读取。 某些系统可以通过将SQL查询拆分为多个实例来解决此问题。 例如,Spark jdbcRDD答应查询的参数化,再结合salted EsgynDB表能更高效的工作:

Apache Spark将使用non-overlapping值范畴启动此查询的多个实例。

相反地从机器学习库来EsgynDB的结果集数据,通常可将数据导出来HDFS的Hive表来完成,然后由EsgynDB读取此Hive表。

在EsgynDB集群上的并行机器学习实例

在这篇博客中,我们复点关注另一种集成方法,即在EsgynDB集群上并行运行机器学习库程序,将EsgynDB中数据作为输入并同时在EsgynDB中处理结果。 对于不同的机器学习库,该方法是通用的,它类似于MapReduce,机器学习程序被构造成多个类似于mapper或reducer的模块。

三大处理模块

为了创建这样的设置,我们结合了三大处理模块:

第一,机器学习程序将data frame作为输入并产生data frame作为输出。 该程序编写类似MapReduce中的mapper或reducer,所以以上程序的多个实例可以并行运行,而无需在实例之间交换状态信息。 例如,程序可以对逻辑上独立的数据运行聚类算法。

Data frame是几个ML包中涉及的概念,它大致相当于SQL中的一个表。 Data frame由指定数据类型的命名列组成。 因为每列具有相同数量的元素,它们可以组成多个行。

第二个模块是由Esgyn为Apache Trafodion提供的用户定义的表值函数(TMUDF),它把机器学习程序与EsgynDB集成来一起。 以文本形式将所需数据提供给机器学习程序的标准输入,并以文本形式接收该程序的输出结果。 许多机器学习库都内置支持以逗号分隔(或以其他方式分隔)格式读取和写入data frame。

最后,我们添加一个驱动查询(driving query)来完整机器学习场景。 该驱动查询产生机器学习程序所需的数据,调用用户定义函数(UDF),并以用户期望的方式处理UDF的结果。 当机器学习程序像reducer一样工作时,驱动查询还定义了如何进行数据分区。 如果机器学习库不支持可横向扩展集群(例如R),这可以让您在更大的数据集上并行地运行算法。

例子:TensorFlow神经网络

江苏快3以Google TensorFlow 中识别手写数字作为神经网络示例,我们在一台单独的机器上训练这个神经网络,然后将它部署来EsgynDB,我们用EsgynDB来并行读取数字。 此示例的驱动SQL查询如下:

集成的UDF称之为“filterprog”,它的调用用红色标注。蓝色部分为输入数据,向量化图像。查询返回图像编号并读取数字作为结果。

TensorFlow程序从标准输入读取图像编号和图像数据,执行图像识别,然后将读取的数字和图像编号打印来标准输出,由EsgynDB读取它们。 EsgynDB优化器根据需要可并行化查询。

请注意该操作可以集成更复杂的SQL查询,比如在机器学习代码之前和之后执行join,union,聚合等操作,并且 多个机器学习步骤可以合并成单个的驱动查询。