Alink 获取 CSV 文件数据(JAVA)

参数说明

Alink 通过 Java 调用 com.alibaba.alink.operator.batch.source.CsvSourceBatchOp 类,去读取 CSV 文件,并且支持从本地、HDFShttp 读取。

主要参数为:

名称中文名称描述类型是否必须?取值范围默认值
filePath文件路径文件路径String
schemaStrSchemaSchema。格式为 colname coltype[, colname2, coltype2[, …]],例如 f0 string, f1 bigint, f2 doubleString
fieldDelimiter字段分隔符字段分隔符String“,”
handleInvalidMethod处理无效值的方法处理无效值的方法,可取 error, skipStringERROR, SKIPERROR
ignoreFirstLine是否忽略第一行数据是否忽略第一行数据Booleanfalse
lenient是否容错若为 true,当解析失败时丢弃该数据;若为 false,解析失败是抛异常Booleanfalse
quoteChar引号字符引号字符Character“””
rowDelimiter行分隔符行分隔符String\n
skipBlankLine是否忽略空行是否忽略空行Booleantrue
支持的字段类型
字段类型描述值域Flink 类型Java 类型
VARCHAR/STRING可变长度字符串最大容量为 4 mbTypes.STRINGjava.lang.String
BOOLEAN逻辑值值:TRUEFALSEUNKNOWNTypes.BOOLEANjava.lang.Boolean
TINYINT微整型,1 字节整数范围是 -128 到 127Types.BYTEjava.lang.Byte
SMALLINT短整型,2 字节整数范围为 -32768 至 32767Types.SHORTjava.lang.Short
INT整型,4 字节整数范围是 -21474836482147483647Types.INTjava.lang.Integer
BIGINT/LONG长整型,8 字节整数范围是 -92233720368547758089223372036854775807Types.LONGjava.lang.Long
FLOAT4 字节浮点数6 位数字精度Types.FLOATjava.lang.Float
DOUBLE8 字节浮点数15 位十进制精度Types.DOUBLEjava.lang.Double
DECIMAL小数类型示例:123.45DECIMAL(5,2)Types.DECIMALjava.math.BigDecimal
DATE日期示例:1969-07-20Types.SQL_DATEjava.sql.Date
TIME时间示例:20:17:40Types.SQL_TIMEjava.sql.Time
TIMESTAMP时间戳,日期和时间示例:1969-07-20 20:17:40Types.SQL_TIMESTAMPjava.sql.Timestamp
关于分隔符的说明

Web 前端支持用户输入如下转义字符和 unicode 字符作为分割符:

输入分隔符含义
\t制表符 ( tab 键)
\n换行符
\b退格符
\r回车
\f换页
\反斜线字符
单引号
"双引号
\ddd1 到 3 位八进制数所代表的任意字符,例如 \001 表示’ctrl + A’,\40 表示空格符
\udddd1 到 4 位十六进制数所代表的 unicode 字符,例如 \u0001 表示’ctrl + A’,\u0020 表示空格符
代码示例
从本地路径读取 CSV 数据
import com.alibaba.alink.operator.batch.BatchOperator;
import com.alibaba.alink.operator.batch.source.CsvSourceBatchOp;

public class test1 {
    public static void main(String[] args) throws Exception {
    		// 设置文件路径
        String data_path = "E:\\Alink_study\\src\\main\\resources\\iris.data.csv";
        // 设置数据各字段的名称和类型
        String SCHEMA_STR = "sepal_length double, sepal_width double, petal_length double, petal_width double, category string";
        // 创建批处理对象
        BatchOperator data = new CsvSourceBatchOp()
                .setFilePath(data_path)
                .setSchemaStr(SCHEMA_STR);
        // 打印前 5 行数据
        data.firstN(5).print();
    }
}

CSV 文件中的部分数据为:

5.1,3.5,1.4,0.2,Iris-setosa
4.9,3.0,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,Iris-setosa
5.0,3.6,1.4,0.2,Iris-setosa
5.4,3.9,1.7,0.4,Iris-setosa
4.6,3.4,1.4,0.3,Iris-setosa
........

IEDA 输出为:
在这里插入图片描述

从网络中获取数据和 HDFS 中读取数据,需要将 data_path,的路径换成对应的 URL

更复杂的例子

一份葡萄酒相关的数据集:

"fixed acidity";"volatile acidity";"citric acid";"residual sugar";"chlorides";"free sulfur dioxide";"total sulfur dioxide";"density";"pH";"sulphates";"alcohol";"quality"
7;0.27;0.36;20.7;0.045;45;170;1.001;3;0.45;8.8;6
6.3;0.3;0.34;1.6;0.049;14;132;0.994;3.3;0.49;9.5;6
8.1;0.28;0.4;6.9;0.05;30;97;0.9951;3.26;0.44;10.1;6
......

第一行为数据列名的说明,第二行开始是数据,可以看到都是数值类型,各个数之间用分号“;”进行分隔。

我们可以通过设置参数 ignoreFirstLine为True,略过第一行;并且可以设置字段分隔符参数 fieldDelimiter 为分号“;”。

另外,由于列名不能包含空格,所以由文件第一列转化来的列名需要进行相应处理,这里我们将其写为驼峰形式;并加上数据类型,这里都是 double 类型,构成了数据集的 SchemaStr。具体的代码如下:

import com.alibaba.alink.operator.batch.BatchOperator;
import com.alibaba.alink.operator.batch.source.CsvSourceBatchOp;

public class test2 {
    public static void main(String[] args) throws Exception {
    // 设置文件路径
        String data_path = "E:\\Alink_study\\src\\main\\resources\\winequality-white.csv";
    // 设置数据各字段的名称和类型
        String SCHEMA_STR = "fixedAcidity double,volatileAcidity double,citricAcid double,residualSugar double,chlorides double,freeSulfurDioxide double,totalSulfurDioxide double,density double,pH double,sulphates double,alcohol double,quality double";
    // 创建批处理对象
        BatchOperator data = new CsvSourceBatchOp()
                // 设置文件路径
                .setFilePath(data_path)
                // 设置字段
                .setSchemaStr(SCHEMA_STR)
                // 设置分隔符
                .setFieldDelimiter(";")
                // 跳过第一行
                .setIgnoreFirstLine(Boolean.TRUE);
        // 输出前 5 行
        data.firstN(5).print();
    }
}

IEDA 输出为:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值