Alink(4):Alink中流组件的数据导入

目录

0. 相关文章链接

1. 内存数据源(MemSourceStreamOp)

1.1. 概述和参数说明

1.2. 代码演示

2. Text文件数据源(TextSourceStreamOp)

2.1. 概述和参数说明

2.2. 代码演示

3. AK文件数据源 (AkSourceStreamOp)

3.1. 概述和参数说明

3.2. 代码演示

4. CSV文件数据源 (CsvSourceStreamOp)

4.1. 概述和参数说明

4.2. 代码演示

5. Catalog数据库数据源 (CatalogSourceStreamOp)

5.1. 概述和参数说明

5.2. 代码演示

6. LibSvm文件数据源 (LibSvmSourceStreamOp)

6.1. 概述和参数说明

6.2. 代码演示

7. TSV文件数据源 (TsvSourceStreamOp)

7.1. 概述和参数说明

7.2. 代码演示

8. Table数据源 (TableSourceStreamOp)

8.1. 概述和参数说明

8.2. 代码演示

9. 数值队列数据源 (NumSeqSourceStreamOp)

9.1. 概述和参数说明

9.2. 代码演示

10. 流式Kafka输入 (KafkaSourceStreamOp)

10.1. 概述和参数说明

10.2. 代码演示

11. 流式模型流输入 (ModelStreamFileSourceStreamOp)

12. 随机生成向量数据源 (RandomVectorSourceStreamOp)

12.1. 概述和参数说明

12.2. 代码演示

13. 随机生成结构数据源 (RandomTableSourceStreamOp)

13.1. 概述和参数说明

13.2. 代码演示


        根据官方文档自我总结改编而来,记载Alink中流组件的数据导入,代码中使用的各文本文件可以通过 Alink流组件数据导入中使用到的文件.rar 链接下载,请跟进代码中的具体配置自我调整路径,本人是放在项目的同一路径下。

0. 相关文章链接

Alink & FlinkMLlib 文章汇总

1. 内存数据源(MemSourceStreamOp)

1.1. 概述和参数说明

Java 类名:com.alibaba.alink.operator.stream.source.MemSourceStreamOp

Python 类名:MemSourceStreamOp

功能介绍:从内存中读取数据生成表

1.2. 代码演示

package com.ouyang.alink.stream.no01_data_import;

import com.alibaba.alink.operator.stream.StreamOperator;
import com.alibaba.alink.operator.stream.source.MemSourceStreamOp;
import org.apache.flink.table.api.DataTypes;
import org.apache.flink.table.api.TableSchema;
import org.apache.flink.types.Row;

import java.util.Arrays;
import java.util.List;

/**
 * @date: 2021/7/15
 * @author: yangshibiao
 * @desc: 从内存中读取数据生成表
 */
public class Demo01_MemSourceStreamOp {
    public static void main(String[] args) throws Exception {

        // 模拟数据
        List<Row> df = Arrays.asList(
                Row.of("1:2.0 2:1.0 4:0.5", 1.5),
                Row.of("1:2.0 2:1.0 4:0.5", 1.7),
                Row.of("1:2.0 2:1.0 4:0.5", 3.6)
        );

        // 创建内存流source对象(传入的参数需要需要数据和表模式)
        TableSchema tableSchema = TableSchema
                .builder()
                .field("f0", DataTypes.STRING())
                .field("f1", DataTypes.DOUBLE())
                .build();
        MemSourceStreamOp streamData = new MemSourceStreamOp(df, tableSchema);

        // 打印
        streamData.print();

        // 启动执行
        StreamOperator.execute();
    }
}

2. Text文件数据源(TextSourceStreamOp)

2.1. 概述和参数说明

Java 类名:com.alibaba.alink.operator.stream.source.TextSourceStreamOp

Python 类名:TextSourceStreamOp

功能介绍:按行读取文件数据

参数说明:

名称

中文名称

描述

类型

是否必须?

默认值

filePath

文件路径

文件路径

String

ignoreFirstLine

是否忽略第一行数据

是否忽略第一行数据

Boolean

false

textCol

文本列名称

文本列名称

String

"text"

2.2. 代码演示

package com.ouyang.alink.stream.no01_data_import;

import com.alibaba.alink.operator.stream.StreamOperator;
import com.alibaba.alink.operator.stream.source.TextSourceStreamOp;

/**
 * @date: 2021/7/15
 * @author: yangshibiao
 * @desc: 按行读取文件数据
 */
public class Demo02_TextSourceStreamOp {

    public static void main(String[] args) throws Exception {

        // filePath	            文件路径	文           件路径
        // ignoreFirstLine	    是否忽略第一行数据	是否忽略第一行数据
        // textCol	文           本列名称	        文本列名称

        // 创建文本流source
        String URL = "D:\\Project\\IDEA\\bigdata-study-tutorial\\alink-tutorial-java\\src\\main\\data\\adult_test.csv";
        TextSourceStreamOp data = new TextSourceStreamOp()
                .setFilePath(URL)
                .setTextCol("text");

        // 打印到控制台,并执行
        data.print();
        StreamOperator.execute();

    }
}

3. AK文件数据源 (AkSourceStreamOp)

3.1. 概述和参数说明

Java 类名:com.alibaba.alink.operator.stream.source.AkSourceStreamOp

Python 类名:AkSourceStreamOp

功能介绍:以流式的方式读Ak文件。Ak文件格式是Alink 自定义的一种文件格式,能够将数据的Schema保留输出的文件格式。

参数说明:

名称

中文名称

描述

类型

是否必须?

默认值

filePath

文件路径

文件路径

String

3.2. 代码演示

package com.ouyang.alink.stream.no01_data_import;

import com.alibaba.alink.common.io.filesystem.FilePath;
import com.alibaba.alink.operator.batch.BatchOperator;
import com.alibaba.alink.operator.batch.sink.AkSinkBatchOp;
import com.alibaba.alink.operator.batch.source.MemSourceBatchOp;
import com.alibaba.alink.operator.stream.StreamOperator;
import com.alibaba.alink.operator.stream.source.AkSourceStreamOp;
import org.apache.flink.table.api.DataTypes;
import org.apache.flink.table.api.TableSchema;
import org.apache.flink.types.Row;

import java.util.Arrays;
import java.util.List;

/**
 * @date: 2021/7/15
 * @author: yangshibiao
 * @desc: 以流式的方式读Ak文件。Ak文件格式是Alink 自定义的一种文件格式,能够将数据的Schema保留输出的文件格式。
 */
public class Demo03_AkSourceStreamOp {
    public static void main(String[] args) throws Exception {

        // 模拟数据
        List<Row> df = Arrays.asList(
                Row.of(2, 1, 1, 1.0),
                Row.of(3, 2, 1, 1.0),
                Row.of(4, 3, 2, 2.0),
                Row.of(2, 4, 1, 1.0),
                Row.of(2, 2, 1, 1.0),
                Row.of(4, 3, 2, 2.0),
                Row.of(1, 2, 1, 1.0)
        );

        // 将数据转换成内存批source
        TableSchema tableSchema = TableSchema
                .builder()
                .field("f0", DataTypes.INT())
                .field("f1", DataTypes.INT())
                .field("f2", DataTypes.INT())
                .field("f3", DataTypes.DOUBLE())
                .build();
        BatchOperator<?> batchData = new MemSourceBatchOp(df, tableSchema);

        // 将内存批source的数据写入到本地ak文件
        String filePath = "D:\\Project\\IDEA\\bigdata-study-tutorial\\alink-tutorial-java\\src\\main\\data\\ak-file.csv";
        batchData.link(
                new AkSinkBatchOp()
                        .setFilePath(new FilePath(filePath))
                        .setOverwriteSink(true)
                        .setNumFiles(1)
        );
        BatchOperator.execute();

        // 通过ak的source流读取本地ak文件中的数据
        new AkSourceStreamOp().setFilePath(new FilePath(filePath)).print();
        StreamOperator.execute();

    }
}

4. CSV文件数据源 (CsvSourceStreamOp)

4.1. 概述和参数说明

Java 类名:com.alibaba.alink.operator.stream.source.CsvSourceStreamOp

Python 类名:CsvSourceStreamOp

功能介绍:读CSV文件数据

参数说明:

名称

中文名称

描述

类型

是否必须?

默认值

filePath

文件路径

文件路径

String

schemaStr

Schema

Schema。格式为"colname coltype[, colname2, coltype2[, ...]]",例如"f0 string, f1 bigint, f2 double"

String

fieldDelimiter

字段分隔符

字段分隔符

String

","

ignoreFirstLine

是否忽略第一行数据

是否忽略第一行数据

Boolean

false

lenient

是否容错

若为true,当解析失败时丢弃该数据;若为false,解析失败是抛异常

Boolean

false

quoteChar

引号字符

引号字符

Character

"""

rowDelimiter

行分隔符

行分隔符

String

"\n"

skipBlankLine

是否忽略空行

是否忽略空行

Boolean

true

支持的字段类型包括:

字段类型

描述

值域

Flink类型

Java类型

VARCHAR/STRING

可变长度字符串

最大容量为4mb

Types.STRING

java.lang.String

BOOLEAN

逻辑值

值:TRUE,FALSE,UNKNOWN

Types.BOOLEAN

java.lang.Boolean

TINYINT

微整型,1字节整数

范围是-128到127

Types.BYTE

java.lang.Byte

SMALLINT

短整型,2字节整数

范围为-32768至32767

Types.SHORT

java.lang.Short

INT

整型,4字节整数

范围是-2147483648到2147483647

Types.INT

java.lang.Integer

BIGINT/LONG

长整型,8字节整数

范围是-9223372036854775808至9223372036854775807

Types.LONG

java.lang.Long

FLOAT

4字节浮点数

6位数字精度

Types.FLOAT

java.lang.Float

DOUBLE

8字节浮点数

15位十进制精度

Types.DOUBLE

java.lang.Double

DECIMAL

小数类型

示例:123.45是DECIMAL(5,2)值

Types.DECIMAL

java.math.BigDecimal

DATE

日期

示例:'1969-07-20'

Types.SQL_DATE

java.sql.Date

TIME

时间

示例:'20:17:40'

Types.SQL_TIME

java.sql.Time

TIMESTAMP

时间戳,日期和时间

示例:'1969-07-20 20:17:40'

Types.SQL_TIMESTAMP

java.sql.Timestamp

关于分隔符的说明,Web前端支持用户输入如下转义字符和unicode字符作为分隔符:

输入分隔符

含义

\t

制表符(tab键)

\n

换行符

\b

退格符

\r

回车

\f

换页

\\

反斜线字符

'

单引号

"

双引号

\ddd

1到3位八进制数所代表的任意字符,例如\001表示'ctrl + A', \40表示空格符

\udddd

1到4位十六进制数所代表unicode字符,例如\u0001表示'ctrl + A', \u0020表示空格符

4.2. 代码演示

package com.ouyang.alink.stream.no01_data_import;

import com.alibaba.alink.operator.stream.StreamOperator;
import com.alibaba.alink.operator.stream.source.CsvSourceStreamOp;

/**
 * @date: 2021/7/15
 * @author: yangshibiao
 * @desc: 读CSV文件数据
 */
public class Demo04_CsvSourceStreamOp {
    public static void main(String[] args) throws Exception {

        // 设置文件路径和模式
        String filePath = "D:\\Project\\IDEA\\bigdata-study-tutorial\\alink-tutorial-java\\src\\main\\data\\movielens_ratings.csv";
        String schema = "c1 int, c2 int, c3 double, c4 long";

        // 创建一个csv的streamsource
        StreamOperator <?> csvSource = new CsvSourceStreamOp()
                .setFilePath(filePath)
                .setSchemaStr(schema)
                .setFieldDelimiter(",");

        // 打印执行
        csvSource.print();
        StreamOperator.execute();

    }
}

5. Catalog数据库数据源 (CatalogSourceStreamOp)

5.1. 概述和参数说明

Java 类名:com.alibaba.alink.operator.stream.source.CatalogSourceStreamOp

Python 类名:CatalogSourceStreamOp

功能介绍:Catalog描述了数据库的属性和数据库的位置, 支持Mysql, Derby, Sqlite, Hive等

定义分成三步:

  1. 第一步,定义Catalog

  2. 第二步, 定义CatalogObject

  3. 第三步,定义Source和Sink

参数说明:

数据库

Java 接口

Derby

DerbyCatalog(String catalogName, String defaultDatabase, String derbyVersion, String derbyPath)

MySql

MySqlCatalog(String catalogName, String defaultDatabase, String mysqlVersion,String mysqlUrl, String port, String userName, String password)

Sqlite

SqliteCatalog(String catalogName, String defaultDatabase, String sqliteVersion, String dbUrl)

Hive

HiveCatalog(String catalogName, String defaultDatabase, String hiveVersion, String hiveConfDir)

HiveCatalog(String catalogName, String defaultDatabase, String hiveVersion, FilePath hiveConfDir)

HiveCatalog(String catalogName, String defaultDatabase, String hiveVersion, String hiveConfDir,String kerberosPrincipal, String kerberosKeytab)

示例:
    derby = DerbyCatalog("derby_test_catalog", DERBY_SCHEMA, "10.6.1.0", derbyFolder+'/'+DERBY_DB)
各插件提供的版本:
    Hive:2.3.4
    MySQL: 5.1.27
    Derby: 10.6.1.0
    SQLite: 3.19.3
    odps: 0.36.4-public
dbName = "sqlite_db"
tableName = "table"
# 第一个参数是Catalog, 第二个参数是DB/Project
catalogObject = CatalogObject(derby, ObjectPath(dbName, tableName))

名称

中文名称

描述

类型

是否必须?

默认值

catalogObject

catalog object

catalog object

String

5.2. 代码演示

package com.ouyang.alink.stream.no01_data_import;

import com.alibaba.alink.common.io.catalog.MySqlCatalog;
import com.alibaba.alink.operator.stream.StreamOperator;
import com.alibaba.alink.operator.stream.source.CatalogSourceStreamOp;
import com.alibaba.alink.params.io.HasCatalogObject;
import org.apache.flink.table.catalog.ObjectPath;

/**
 * @date: 2021/7/15
 * @author: yangshibiao
 * @desc: catalog
 * Catalog描述了数据库的属性和数据库的位置, 支持Mysql, Derby, Sqlite, Hive.
 * 在使用时,需要先下载插件,详情请看https://www.yuque.com/pinshu/alink_guide/czg4cx
 * 定义分成三步:
 * 第一步,定义Catalog
 * 第二步, 定义CatalogObject
 * 第三步,定义Source和Sink
 */
public class Demo05_CatalogSourceStreamOp {


    public static void main(String[] args) throws Exception {

        /*
        第一步,定义Catalog
            包括catalogName:目录名,自定义,当为null时会自动生成,"catalog_" + UUID.randomUUID().toString().replaceAll("-", "_");
            dafaultDatabase:默认数据库名,在数据库中一定要有,如果为null,会使用 default 库
            MySQL版本
            url
            port
            userName
            password
         */
        MySqlCatalog mySqlCatalog = new MySqlCatalog(
                "mysql_test_catalog",
                "test",
                "5.5.27",
                "localhost",
                "3306",
                "root",
                "123456"
        );

        /*
        第二步, 根据定义CatalogObject
            在Catalog已经定义好的基础上,设置数据库名 和 表名
         */
        HasCatalogObject.CatalogObject catalogObject = new HasCatalogObject.CatalogObject(
                mySqlCatalog,
                new ObjectPath("tags", "tbl_model")
        );

        // 定义Source和Sink
        CatalogSourceStreamOp catalogSourceBatchOp = new CatalogSourceStreamOp().setCatalogObject(catalogObject);

        // 打印执行
        catalogSourceBatchOp.print();
        StreamOperator.execute();
    }
}

6. LibSvm文件数据源 (LibSvmSourceStreamOp)

6.1. 概述和参数说明

Java 类名:com.alibaba.alink.operator.stream.source.LibSvmSourceStreamOp

Python 类名:LibSvmSourceStreamOp

功能介绍:读LibSVM文件。支持从本地、hdfs读取。

参数说明:

名称

中文名称

描述

类型

是否必须?

默认值

filePath

文件路径

文件路径

String

startIndex

起始索引

起始索引

Integer

1

6.2. 代码演示

package com.ouyang.alink.stream.no01_data_import;

import com.alibaba.alink.operator.stream.StreamOperator;
import com.alibaba.alink.operator.stream.sink.LibSvmSinkStreamOp;
import com.alibaba.alink.operator.stream.source.LibSvmSourceStreamOp;
import com.alibaba.alink.operator.stream.source.MemSourceStreamOp;
import org.apache.flink.table.api.DataTypes;
import org.apache.flink.table.api.TableSchema;
import org.apache.flink.types.Row;

import java.util.Arrays;
import java.util.List;

/**
 * @date: 2021/7/15
 * @author: yangshibiao
 * @desc: 读LibSVM文件。支持从本地、hdfs读取。
 */
public class Demo06_LibSvmSourceStreamOp {
    public static void main(String[] args) throws Exception {

        // 模拟数据
        List<Row> df = Arrays.asList(
                Row.of("1:2.0 2:1.0 4:0.5", 1.5),
                Row.of("1:2.0 2:1.0 4:0.5", 1.7),
                Row.of("1:2.0 2:1.0 4:0.5", 1.7),
                Row.of("1:2.0 2:1.0 4:0.5", 1.7),
                Row.of("1:2.0 2:1.0 4:0.5", 3.6)
        );

        // 创建表模式,并通过内存sourceStream将模拟的数据导入
        TableSchema tableSchema = TableSchema
                .builder()
                .field("f1", DataTypes.STRING())
                .field("f2", DataTypes.DOUBLE())
                .build();
        StreamOperator <?> streamData = new MemSourceStreamOp(df, tableSchema);

        // 将数据通过libsvm的sink对象写入到文件中
        String filepath = "D:\\Project\\IDEA\\bigdata-study-tutorial\\alink-tutorial-java\\src\\main\\data\\tmp";
        StreamOperator <?> sink = new LibSvmSinkStreamOp()
                .setFilePath(filepath)
                .setLabelCol("f2")
                .setVectorCol("f1")
                .setOverwriteSink(true);
        streamData.link(sink);
        StreamOperator.execute();

        // 通过libsvm的sourceStream对象将文件中的对象读取出来,并打印执行
        StreamOperator <?> stream_data = new LibSvmSourceStreamOp().setFilePath(filepath);
        stream_data.print();
        StreamOperator.execute();

    }
}

7. TSV文件数据源 (TsvSourceStreamOp)

7.1. 概述和参数说明

Java 类名:com.alibaba.alink.operator.stream.source.TsvSourceStreamOp

Python 类名:TsvSourceStreamOp

功能介绍:读Tsv文件,Tsv文件是以tab为分隔符

参数说明:

名称

中文名称

描述

类型

是否必须?

默认值

filePath

文件路径

文件路径

String

schemaStr

Schema

Schema。格式为"colname coltype[, colname2, coltype2[, ...]]",例如"f0 string, f1 bigint, f2 double"

String

ignoreFirstLine

是否忽略第一行数据

是否忽略第一行数据

Boolean

false

skipBlankLine

是否忽略空行

是否忽略空行

Boolean

true

7.2. 代码演示

package com.ouyang.alink.stream.no01_data_import;

import com.alibaba.alink.operator.stream.StreamOperator;
import com.alibaba.alink.operator.stream.sink.TsvSinkStreamOp;
import com.alibaba.alink.operator.stream.source.MemSourceStreamOp;
import com.alibaba.alink.operator.stream.source.TsvSourceStreamOp;
import org.apache.flink.table.api.DataTypes;
import org.apache.flink.table.api.TableSchema;
import org.apache.flink.types.Row;

import java.util.Arrays;
import java.util.List;

/**
 * @date: 2021/7/15
 * @author: yangshibiao
 * @desc: 读Tsv文件,Tsv文件是以tab为分隔符
 */
public class Demo07_TsvSourceStreamOp {

    public static void main(String[] args) throws Exception {
        // 准备数据
        List<Row> df = Arrays.asList(
                Row.of("0L", "1L", 0.6),
                Row.of("2L", "2L", 0.8),
                Row.of("2L", "4L", 0.6),
                Row.of("3L", "1L", 0.6),
                Row.of("3L", "2L", 0.3),
                Row.of("3L", "4L", 0.4)
        );

        // 将数据和表模式导入到内存源中
        TableSchema tableSchema = TableSchema
                .builder()
                .field("uid", DataTypes.STRING())
                .field("iid", DataTypes.STRING())
                .field("label", DataTypes.DOUBLE())
                .build();
        StreamOperator<?> source = new MemSourceStreamOp(df, tableSchema);

        // 通过tsv的sinkStream对象将内存源中的数据写入到文件中
        String filepath = "D:\\Project\\IDEA\\bigdata-study-tutorial\\alink-tutorial-java\\src\\main\\data\\abc.tsv";
        TsvSinkStreamOp tsvSink = new TsvSinkStreamOp()
                .setFilePath(filepath)
                .setOverwriteSink(true);
        source.link(tsvSink);
        StreamOperator.execute();

        // 通过tsv的sourceStream对象将文件中的数据读取出来
        StreamOperator<?> tsvSource = new TsvSourceStreamOp().setFilePath(filepath).setSchemaStr("uid string, iid string, label double");
        tsvSource.print();
        StreamOperator.execute();
    }
}

8. Table数据源 (TableSourceStreamOp)

8.1. 概述和参数说明

Java 类名:com.alibaba.alink.operator.stream.source.TableSourceStreamOp

Python 类名:TableSourceStreamOp

功能介绍:从Table中生成StreamOperator数据

8.2. 代码演示

package com.ouyang.alink.stream.no01_data_import;

import com.alibaba.alink.operator.batch.BatchOperator;
import com.alibaba.alink.operator.batch.source.TableSourceBatchOp;
import com.alibaba.alink.operator.batch.source.TsvSourceBatchOp;
import com.alibaba.alink.operator.stream.StreamOperator;
import com.alibaba.alink.operator.stream.source.MemSourceStreamOp;
import com.alibaba.alink.operator.stream.source.TableSourceStreamOp;
import com.alibaba.alink.operator.stream.source.TsvSourceStreamOp;
import org.apache.flink.table.api.DataTypes;
import org.apache.flink.table.api.TableSchema;
import org.apache.flink.types.Row;

import java.util.Arrays;
import java.util.List;

/**
 * @date: 2021/7/15
 * @author: yangshibiao
 * @desc: 从Table中生成StreamOperator数据
 */
public class Demo08_TableSourceStreamOp {

    public static void main(String[] args) throws Exception {

        // 准备数据
        List<Row> df = Arrays.asList(
                Row.of(0, "0 0 0"),
                Row.of(1, "1 1 1"),
                Row.of(2, "2 2 2")
        );

        // 将数据和表模式导入到内存源中
        TableSchema tableSchema = TableSchema
                .builder()
                .field("id", DataTypes.INT())
                .field("vec", DataTypes.STRING())
                .build();
        StreamOperator <?> inOp = new MemSourceStreamOp(df, tableSchema);

        // 将table转换为table的源,并输出(该table可以通过其他的输入源执行getOutputTable方法获取)
//        new TableSourceStreamOp(inOp.getOutputTable()).print();
//        StreamOperator.execute();
        String filepath = "D:\\Project\\IDEA\\bigdata-study-tutorial\\alink-tutorial-java\\src\\main\\data\\abc.tsv";
        TsvSourceStreamOp tsvSource = new TsvSourceStreamOp().setFilePath(filepath).setSchemaStr("uid string, iid string, label double");
        new TableSourceStreamOp(tsvSource.getOutputTable()).print();
        StreamOperator.execute();

    }

}

9. 数值队列数据源 (NumSeqSourceStreamOp)

9.1. 概述和参数说明

Java 类名:com.alibaba.alink.operator.stream.source.NumSeqSourceStreamOp

Python 类名:NumSeqSourceStreamOp

功能介绍:生成连续整数的表

9.2. 代码演示

package com.ouyang.alink.stream.no01_data_import;

import com.alibaba.alink.operator.stream.StreamOperator;
import com.alibaba.alink.operator.stream.source.NumSeqSourceStreamOp;

/**
 * @date: 2021/7/15
 * @author: yangshibiao
 * @desc: 生成连续整数的表
 */
public class Demo09_NumSeqSourceStreamOp {

    public static void main(String[] args) throws Exception {

        NumSeqSourceStreamOp streamData = new NumSeqSourceStreamOp(0,10,0.1);
        streamData.print();
        StreamOperator.execute();

    }
}

10. 流式Kafka输入 (KafkaSourceStreamOp)

10.1. 概述和参数说明

Java 类名:com.alibaba.alink.operator.stream.source.KafkaSourceStreamOp

Python 类名:KafkaSourceStreamOp

功能介绍:读Kafka中的数据,Kafka是由Apache软件基金会开发的一个开源流处理平台。

参数说明:

名称

中文名称

描述

类型

是否必须?

默认值

bootstrapServers

bootstrapServers

bootstrapServers

String

groupId

groupId

groupId

String

startupMode

startupMode

startupMode

String

properties

用户自定义Kafka参数

用户自定义Kafka参数,形如: "prop1=val1,prop2=val2"

String

null

startTime

起始时间

起始时间。默认从当前时刻开始读。

String

null

topic

topic名称

topic名称

String

null

topicPattern

"topic pattern"

"topic pattern"

String

null

注意:需要先通过插件下载需要的jar包,再手动导入项目中才能连接kafka

10.2. 代码演示

package com.ouyang.alink.stream.no01_data_import;

import com.alibaba.alink.operator.stream.StreamOperator;
import com.alibaba.alink.operator.stream.dataproc.JsonValueStreamOp;
import com.alibaba.alink.operator.stream.sink.KafkaSinkStreamOp;
import com.alibaba.alink.operator.stream.source.CsvSourceStreamOp;
import com.alibaba.alink.operator.stream.source.KafkaSourceStreamOp;

/**
 * @date: 2021/7/15
 * @author: yangshibiao
 * @desc: 流式读取kafka中的数据(对kafka的读写需要下载alink连接kafka的插件,并手动导入,目前还没有alink连接kafka的依赖包)
 */
public class Demo10_KafkaSourceStreamOp {

    public static void main(String[] args) throws Exception {

        // Kakfa的参数设置
        // String props = "bootstrap.servers=127.0.0.1:9092,group.id=alink_kafka_test_group_id";
        // bootstrapServers	    bootstrapServers	    bootstrapServers	                                String
        // groupId	            groupId	g               roupId	                                            String
        // startupMode	        startupMode	            startupMode	                                        String
        // properties	        用户自定义Kafka参数	    用户自定义Kafka参数,形如: "prop1=val1,prop2=val2"	String
        // startTime	        起始时间	起始时间。       默认从当前时刻开始读。	                            String
        // topic	            topic名称	            topic名称	                                        String
        // topicPattern	        "topic pattern"	        "topic pattern"	                                    String

        // 定义一个csv本地的sourceStream,从本地获取文件,并发送到kafka中
        // 设置文件路径和模式
        String filePath = "D:\\Project\\IDEA\\bigdata-study-tutorial\\alink-tutorial-java\\src\\main\\data\\movielens_ratings.csv";
        String schema = "c1 int, c2 int, c3 double, c4 long";

        // 创建一个csv的sourceStream
        CsvSourceStreamOp csvSource = new CsvSourceStreamOp()
                .setFilePath(filePath)
                .setSchemaStr(schema)
                .setFieldDelimiter(",");

        // 创建一个kafka的sinkStream
        KafkaSinkStreamOp kafkaSink = new KafkaSinkStreamOp()
                .setBootstrapServers("localhost:9092")
                .setDataFormat("json")
                .setTopic("iris");

        // 将csv的source中的数据写入到kafka的sink中
        csvSource.link(kafkaSink);

        // 使用KafkaSourceStreamOp从kafka中获取数据
        KafkaSourceStreamOp kafkaSourceStream = new KafkaSourceStreamOp()
                // kafka地址
                .setBootstrapServers("127.0.0.1:9092")
                // kafka的topic
                .setTopic("iris")
                // 当在kafka中保存偏移量的topic中有偏移量时从偏移量消费,没有从最新开始消费(其他还可以设置earliest,从最开始的数据开始消费等)
                // 相当于flink的kafka中的 auto.offset.reset
                .setStartupMode("latest")
                // 消费者组id
                .setGroupId("alink_kafka_test_group_id");

        // 因为获取的数据是json类型,对json类型进行解析
        StreamOperator data = kafkaSourceStream
                .link(
                        new JsonValueStreamOp()
                                .setSelectedCol("message")
                                .setReservedCols(new String[]{})
                                .setOutputCols("c1", "c2", "c3", "c4")
                                .setJsonPath("$.c1", "$.c2", "$.c3", "$.c4")

                )
                .select("cast(c1 as int) as c111, cast(c2 as int) as c222, cast(c3 as double) as c333, c4");

        // 打印表结构,数据
        System.out.println(data.getSchema());
        data.print();
        StreamOperator.execute();
    }
}

11. 流式模型流输入 (ModelStreamFileSourceStreamOp)

Java 类名:com.alibaba.alink.operator.stream.source.ModelStreamFileSourceStreamOp

Python 类名:ModelStreamFileSourceStreamOp

功能介绍:从文件系统读模型流。

参数说明:

名称

中文名称

描述

类型

是否必须?

默认值

filePath

文件路径

文件路径

String

scanInterval

扫描模型路径的时间间隔

描模型路径的时间间隔,单位秒

Integer

10

schemaStr

Schema

Schema。格式为"colname coltype[, colname2, coltype2[, ...]]",例如"f0 string, f1 bigint, f2 double"

String

null

startTime

起始时间

起始时间。默认从当前时刻开始读。使用yyyy-mm-dd hh:mm:ss.fffffffff格式,详见Timestamp.valueOf(String s)

String

null

12. 随机生成向量数据源 (RandomVectorSourceStreamOp)

12.1. 概述和参数说明

Java 类名:com.alibaba.alink.operator.stream.source.RandomVectorSourceStreamOp

Python 类名:RandomVectorSourceStreamOp

功能介绍:生成随机张量的表

参数说明:

名称

中文名称

描述

类型

是否必须?

默认值

size

张量size

整型数组,张量的size

Integer[]

maxRows

最大行数

输出数据流的行数目的最大值

Long

sparsity

稀疏度

非零元素在所有张量数据中的占比

Double

idCol

id 列名

列名,若列名非空,表示输出表中包含一个整形序列id列,否则无该列

String

"alink_id"

outputCol

输出列名

输出随机生成的数据存储列名

String

"tensor"

timePerSample

稀疏度

整型数组,张量的size

Double

null

12.2. 代码演示

package com.ouyang.alink.stream.no01_data_import;

import com.alibaba.alink.operator.stream.StreamOperator;
import com.alibaba.alink.operator.stream.source.RandomVectorSourceStreamOp;

/**
 * @date: 2021/7/15
 * @author: yangshibiao
 * @desc: 生成随机张量的表
 */
public class Demo11_RandomVectorSourceStreamOp {
    public static void main(String[] args) throws Exception {

        // size	            张量size	整型数组,张量的size	                                        Integer[]
        // maxRows	        最大行数	    输出数据流的行数目的最大值	                                Long
        // sparsity	        稀疏度	    非零元素在所有张量数据中的占比	                            Double
        // idCol	        id 列名	    列名,若列名非空,表示输出表中包含一个整形序列id列,否则无该列	String
        // outputCol	    输出列名	    输出随机生成的数据存储列名	                                String
        // timePerSample	稀疏度	    整型数组,张量的size	                                        Double
        new RandomVectorSourceStreamOp().setMaxRows(10L).setSize(new Integer[] {2}).setSparsity(1.0).print();
        StreamOperator.execute();

    }
}

13. 随机生成结构数据源 (RandomTableSourceStreamOp)

13.1. 概述和参数说明

Java 类名:com.alibaba.alink.operator.stream.source.RandomTableSourceStreamOp

Python 类名:RandomTableSourceStreamOp

功能介绍:随机生成流式的表数据。

参数说明:

名称

中文名称

描述

类型

是否必须?

默认值

numCols

输出表列数目

输出表中列的数目,整型

Integer

maxRows

输出表行数目最大值

输出数据流的表的行数目的最大值,整型

Long

idCol

id 列名

列名,若列名非空,表示输出表中包含一个整形序列id列,否则无该列

String

"num"

outputColConfs

列配置信息

表示每一列的数据分布配置信息

String

null

outputCols

输出列名数组

字符串数组,当参数不设置时,算法自动生成

String[]

null

timePerSample

每条样本流过的时间

每两条样本间的时间间隔,单位秒

Double

null

timeZones

每条样本流过的时间区间

用来控制样本输出频率的参数,每两条样本的输出间隔在这个区间范围内,单位秒

Double[]

null

13.2. 代码演示

package com.ouyang.alink.stream.no01_data_import;

import com.alibaba.alink.operator.stream.StreamOperator;
import com.alibaba.alink.operator.stream.source.RandomTableSourceStreamOp;

/**
 * @date: 2021/7/15
 * @author: yangshibiao
 * @desc: 随机生成流式的表数据
 */
public class Demo12_RandomTableSourceStreamOp {
    public static void main(String[] args) throws Exception {

        StreamOperator<?> data = new RandomTableSourceStreamOp()
                .setNumCols(4)
                .setMaxRows(10L)
                .setIdCol("id")
                .setOutputCols(new String[]{"group_id", "f0", "f1", "f2"})
                .setOutputColConfs("group_id:weight_set(111.0,1.0,222.0,1.0);f0:gauss(0,2);f1:gauss(0,2);f2:gauss(0,2)");

        data.print();

        StreamOperator.execute();

    }
}

        根据官方文档自我总结改编而来,记载Alink中流组件的数据导入,代码中使用的各文本文件可以通过 Alink流组件数据导入中使用到的文件.rar 链接下载,请跟进代码中的具体配置自我调整路径,本人是放在项目的同一路径下。


注:其他相关文章链接由此进 -> Alink & FlinkMLlib 文章汇总


  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

电光闪烁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值