如何实现 DataFrame 和 Alink 批式数据的互相转化?

Alink 提供了 collectToDataframe() 和 fromDataframe() 方法,实现了 DataFrame 和 Alink 批式数据的互相转化。

Alink 批式数据 -> DataFrame

Alink 的批式数据源或者计算结果,如果能转成 Python 的 DataFrame 形式,则可以利用 Python 丰富的函数库及可视化功能,进行后续的分析和显示。

Alink 中每个批式数据源或批式算子都支持 collectToDataframe() 方法,不需要输入参数,返回的结果就是 DataFrame。注意,该方法中带有 collect 字样,表明其执行过程中会使用 Flink 的 collect 方法,触发 Flink 任务执行。

示例如下,我们使用 CsvSourceBatchOp 读取 UCI 网站的 iris.data 数据。

source = CsvSourceBatchOp()\
    .setFilePath("http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data")\
    .setSchemaStr("sepal_length double, sepal_width double, petal_length double, petal_width double, category string")

然后调用变量 source 的 collectToDataframe() 方法,得到相应的 DataFrame,付给变量 df_iris。

df_iris = source.collectToDataframe()

到这里,我们就已经实现了 Alink 数据到 Python DataFrame 的转化,下面我们就可以使用 Python 的函数,进一步处理 df_iris,譬如:使用 head() 方法,显示前 5 条数据。

df_iris.head()

运行结果为:

DataFrame -> Alink 批式数据

对于 DataFrame 形式的数据,Alink 提供了 fromDataframe() 方法,将数据转换为 Alink 批式数据。具体使用示例如下:

iris = BatchOperator.fromDataframe(df_iris, "sepal_length double, sepal_width double, petal_length double, petal_width double, category string")

使用 Alink 批式算子 BatchOperator 的静态方法 fromDataframe(),第一个参数为 DataFrame 数据,第二个参数为数据 Schema 的描述,由于 DataFrame 的数据类型与 Alink 有点差异,通过设置 schema 参数,可以严格保证转化后的数据与我们期望的一致。关于 Schema String 更多的介绍可以参见:

Alink Schema String 简介
https://zhuanlan.zhihu.com/p/...

最后,我们看一下转换后的 Alink 批式数据 iris,取前 5 条数据进行打印输出,代码如下:

iris.firstN(5).print()

结果显示为:

以上。Alink 是基于 Flink 的机器学习算法平台,欢迎访问 Alink 的 GitHub 获取下载链接及更多信息。也欢迎加入 Alink 开源用户群进行交流~

Alink GitHub 链接:
https://github.com/alibaba/Alink

▼ 钉钉扫码加入 Alink 技术交流群 ▼

你可能感兴趣的:(机器学习)