目录
2. Text文件数据源(TextSourceStreamOp)
4. CSV文件数据源 (CsvSourceStreamOp)
5. Catalog数据库数据源 (CatalogSourceStreamOp)
6. LibSvm文件数据源 (LibSvmSourceStreamOp)
7. TSV文件数据源 (TsvSourceStreamOp)
8. Table数据源 (TableSourceStreamOp)
9. 数值队列数据源 (NumSeqSourceStreamOp)
10. 流式Kafka输入 (KafkaSourceStreamOp)
11. 流式模型流输入 (ModelStreamFileSourceStreamOp)
12. 随机生成向量数据源 (RandomVectorSourceStreamOp)
13. 随机生成结构数据源 (RandomTableSourceStreamOp)
根据官方文档自我总结改编而来,记载Alink中流组件的数据导入,代码中使用的各文本文件可以通过 Alink流组件数据导入中使用到的文件.rar 链接下载,请跟进代码中的具体配置自我调整路径,本人是放在项目的同一路径下。
0. 相关文章链接
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等
定义分成三步:
-
第一步,定义Catalog
-
第二步, 定义CatalogObject
-
第三步,定义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) |
示例:
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 文章汇总