• ALINK(二):使用 Maven 快速构建 Alink 项目(JAVA开发环境)


    来源:https://www.yuque.com/pinshu/alink_guide/mm66ev

    第一步,创建项目

    在InterlliJ IDEA中选择创建新项目,并选择Maven,如下图所示:

     使用默认选项,不用勾选"Create from archetype",点击"Next"按钮,进入下图所示页面,这里只需填写Name项,其它内容会自动关联生成。

    最后,点击"Finish"按钮,就完成了Maven工程的创建。

    我们在InterlliJ IDEA编辑器中可以看到整个项目的结构如下:

     我们查看pom.xml,内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>org.example</groupId>
        <artifactId>AlinkMavenExample</artifactId>
        <version>1.0-SNAPSHOT</version>
    </project>

    第二步,HelloAlink

    在开始引入Alink相关jar包前,我们先进行一个小实验,运行简单的打印输出。在src -> main -> java下新建一个package: "org.example",再新建一个Java Class: "HelloAlink.java"

    package org.example; public class HelloAlink {     public static void main(String[] args) {         System.out.println("Hello Alink!");     } }

    运行该代码,结果正常打印。

    然后,我们在看一下maven打包的情况,进入IDEA的Maven窗口,如下图所示

    在Maven窗口中点击执行"package"操作,操作正常执行完成。在该项目文件夹的target子文件夹下可以看到打包出来的 AlinkMavenExample-1.0-SNAPSHOT.jar

     

    第三步,修改POM文件,导入Alink相关jar包

    这是本文中最重要的环节,在POM文件中设置Alink相关的dependency,从而在项目中可以使用Alink库函数。

    可以从如下两个地址中找到Alink1.1.0的dependency设置:

    alibaba/Alink

    其实,Alink提供了两个设置方案,分别针对Flink1.10和Flink1.9版本,这里我们选择针对Flink最新版本的方案。复制dependency项,并粘贴到POM的 <dependencies>...</dependencies>中,改动后的POM文件内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>org.example</groupId>
        <artifactId>AlinkMavenExample</artifactId>
        <version>1.0-SNAPSHOT</version>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.alink</groupId>
                <artifactId>alink_core_flink-1.10_2.11</artifactId>
                <version>1.1.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.flink</groupId>
                <artifactId>flink-streaming-scala_2.11</artifactId>
                <version>1.10.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.flink</groupId>
                <artifactId>flink-table-planner_2.11</artifactId>
                <version>1.10.0</version>
            </dependency>
        </dependencies>
    </project>

    这是IDEA会弹出小窗如下:

    选择"Import Changes",需要等待一段时间,将所需的jar包下载到本地maven仓库。

    第四步,构建运行

    参考Alink的Java例子:

    https://github.com/alibaba/Alink/blob/master/examples/src/main/java/com/alibaba/alink/KMeansExample.java

    在当前项目中新建KMeansExample.java,保留当前的package路径`package org.example;`,将Alink例子中的其它代码直接复制过来。代码如下:

    package org.example;
    import com.alibaba.alink.operator.batch.BatchOperator;
    import com.alibaba.alink.operator.batch.source.CsvSourceBatchOp;
    import com.alibaba.alink.pipeline.Pipeline;
    import com.alibaba.alink.pipeline.clustering.KMeans;
    import com.alibaba.alink.pipeline.dataproc.vector.VectorAssembler;
    /**
     * Example for KMeans.
     */
    public class KMeansExample {
        public static void main(String[] args) throws Exception {
            String URL = "https://alink-release.oss-cn-beijing.aliyuncs.com/data-files/iris.csv";
            String SCHEMA_STR = "sepal_length double, sepal_width double, petal_length double, petal_width double, category string";
            BatchOperator data = new CsvSourceBatchOp().setFilePath(URL).setSchemaStr(SCHEMA_STR);
            VectorAssembler va = new VectorAssembler()
                    .setSelectedCols(new String[]{"sepal_length", "sepal_width", "petal_length", "petal_width"})
                    .setOutputCol("features");
            KMeans kMeans = new KMeans().setVectorCol("features").setK(3)
                    .setPredictionCol("prediction_result")
                    .setPredictionDetailCol("prediction_detail")
                    .setReservedCols("category")
                    .setMaxIter(100);
            Pipeline pipeline = new Pipeline().add(va).add(kMeans);
            pipeline.fit(data).transform(data).print();
        }
    }

    然后,选择运行 KMeansExample.main(),可看到正常的输出结果如下(显示篇幅关系,只保留了头两条和末尾2条数据):

    category|prediction_result|prediction_detail --------|-----------------|----------------- Iris-setosa|0|0.49148233882941467 0.3017994492572307 0.2067182119133547 Iris-versicolor|1|0.3249474882831926 0.396327539544579 0.2787249721722284 ...... Iris-virginica|2|0.13906038938197507 0.38042216584746935 0.4805174447705556 Iris-virginica|1|0.18304443868954268 0.43146730855314785 0.38548825275730947

  • 相关阅读:
    基于STM32F103C8T6的超声波测距示例
    ST-LINK 到 SWD接线图
    MDK破解版下载
    CompletableFuture Quasar 等并发编程
    c++中参数传递和函数返回简析
    c++中冒号(:)和双冒号(::)的用法
    c++中,size_typt, size_t, ptrdiff_t 简介
    c++中,保证头文件只被编译一次,避免多重包含的方法
    时间序列分析之一次指数平滑法
    Openv2.1基本数据类型
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/14865015.html
Copyright © 2020-2023  润新知