内容简介:小哈公司最近准备开发一套新的平台,具体什么平台,因为涉密,这里就不透露了。平台在最终的的技术选型中,其中主要依赖的技术栈是 Apache Flink, 一款 Apache 基金会开源的流处理框架,平台的核心业务都会交给 Flink 去处理,其中包括离线批量任务计算,以及实时任务计算。PS: 后面小哈也会分享一些 Flink 相关的文章,正在考虑要不要立个 Flag, 出一套 Flink 的入门教程系列文章,主要怕自己太懒了,泼出去的水,收不回来,那就尴尬了~
个人博客: https://www.exception.site/essay/how-to-create-read-csv-by-javacsv
一、背景
小哈公司最近准备开发一套新的平台,具体什么平台,因为涉密,这里就不透露了。平台在最终的的技术选型中,其中主要依赖的技术栈是 Apache Flink, 一款 Apache 基金会开源的流处理框架,平台的核心业务都会交给 Flink 去处理,其中包括离线批量任务计算,以及实时任务计算。
PS: 后面小哈也会分享一些 Flink 相关的文章,正在考虑要不要立个 Flag, 出一套 Flink 的入门教程系列文章,主要怕自己太懒了,泼出去的水,收不回来,那就尴尬了~
然后呢?和这篇文章的主题啥关系?
哎,别急,听我娓娓道来!主要是我们部门也是第一次接触 Flink, 虽然久闻大名,知道其计算性能极为出众,但是耳听为虚,一番性能测试是是避免不的。
于是,小哈以离线场景为例,模拟实际业务数据,输入源为 csv 编码文件针对不同量级的数据,100w, 1000w, 一亿的数据量做测试,分别看看不同维度的性能指标,如执行耗时、CPU、内存、吞吐量等。
PS: 因为小哈毕竟不是专业的测试人员,这里只是做了一些简单的测试,对 Flink 的性能有个大致的认知即可。小伙伴们如果有需要,可以使用专门的大数据测试工具,如 HiBench。
这里贴一篇美团技术团队出品的文章《流计算框架 Flink 与 Storm 的性能对比》,有兴趣的小伙伴可以看下:
https://tech.meituan.com/2017/11/17/flink-benchmark.html
好了,铺垫了这么多,其实是想水文一篇,没啥技术含量,就是给大家推荐第三方 工具 库 JavaCSV ,用来造一些 csv 测试数据文件,个人觉得它非常地优雅方便 (比较偷懒~ 代码量少~)。
JavaCSV 官网地址: https://sourceforge.net/projects/javacsv/
JavaCSV API 说明文档: http://javacsv.sourceforge.net/
二、开始
2.1 添加 Maven 依赖
<dependency>
<groupId>net.sourceforge.javacsv</groupId>
<artifactId>javacsv</artifactId>
<version>2.0</version>
</dependency>
2.2 写文件
要如何通过 javacsv 生成 CSV 文件呢?参考下面的示例代码:
/**
* @author 犬小哈(公众号:小哈学Java)
* @date 2019/4/12
* @time 下午3:05
* @discription 读写 csv 文件
**/
public class ReadAndWriterCsvFlie {
// 需要写入的 csv 文件路径
public static final String WRITE_CSV_FILE_PATH = "/Users/a123123/Work/flink-study/write_test.csv";
/**
* 生成 csv 文件
*/
public static void writeCsvFile(String writeCsvFilePath) {
// 创建 CSV Writer 对象, 参数说明(写入的文件路径,分隔符,编码格式)
CsvWriter csvWriter = new CsvWriter(writeCsvFilePath,',', Charset.forName("GBK"));
try {
// 定义 header 头
String[] headers = {"订单号", "用户名", "支付金额"};
// 写入 header 头
csvWriter.writeRecord(headers);
// 写入一千条记录
for (int i = 0; i < 1000; i++) {
String orderNum = UUID.randomUUID().toString();
String userName = "用户" + i;
String payMoney = String.valueOf(i);
// 写入行
csvWriter.writeRecord((String[]) Arrays.asList(orderNum, userName, payMoney).toArray());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
csvWriter.close();
}
}
public static void main(String[] args) {
writeCsvFile(WRITE_CSV_FILE_PATH);
}
}
通过上面的示例代码,我们就可以很轻松地造一批测试数据,只需要改下需要生成的行数即可。相比较其他的库,代码量还是非常少的。
运行代码,看下最终的效果图:
2.1 读文件
说完了如何通过 javacsv 来写 csv 文件,再来说说如何读取 csv 文件,就以上面生成的 csv 文件作为读取源,示例代码如下:
/**
* @author 犬小哈(公众号:小哈学Java)
* @date 2019/4/12
* @time 下午3:05
* @discription 读写 csv 文件
**/
public class ReadAndWriterCsvFlie {
// 需要写入的 csv 文件路径
public static final String WRITE_CSV_FILE_PATH = "/Users/a123123/Work/flink-study/write_test.csv";
/**
* 读取 csv 文件
*/
public static void readCsvFile(String readCsvFilePath) {
// 缓存读取的数据
List<String[]> content = new ArrayList<>();
try {
// 创建 CSV Reader 对象, 参数说明(读取的文件路径,分隔符,编码格式)
CsvReader csvReader = new CsvReader(readCsvFilePath, ',', Charset.forName("GBK"));
// 跳过表头
csvReader.readHeaders();
// 读取除表头外的内容
while (csvReader.readRecord()) {
// 读取一整行
String line = csvReader.getRawRecord();
System.out.println(line);
content.add(csvReader.getValues());
}
csvReader.close();
for (int row = 0; row < content.size(); row++) {
// 读取第 row 行,第 0 列的数据
String orderNum = content.get(row)[0];
System.out.println("==> orderNum: " + orderNum);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
readCsvFile(WRITE_CSV_FILE_PATH);
}
}
运行代码,看下控制台打印效果:
打完收工~
总结
本文小哈主要带着大家了解了一下,如何通过第三方库 JavaCSV 来对 csv 文件进行读写操作,实际场景中可能应用并不广泛,更多还是使用统一的文件库,如阿里的 EasyExcel,EasyPOI 等, 小哈这里使用,也仅仅是为了造测试数据而已。
PS: 关于 EasyExcel 使用教程, 小伙伴可以看下小哈之前写的一篇文章: 《7 行代码优雅地实现 Excel 文件生成&下载功能》
好了,水文结束,小伙伴们觉得有帮助记得点个再看哈~ 感谢感谢~ 下期见~
Ref
- https://sourceforge.net/projects/javacsv/
- http://javacsv.sourceforge.net/
- https://blog.csdn.net/StemQ/article/details/60780859?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
- https://segmentfault.com/a/1190000020351726
欢迎关注微信公众号: 小哈学Java
更多干货文章,请关注笔者公众号: 小哈学Java (ID: xiaoha_java), 专注于分享Java领域干货文章, 不限于 BAT 面试题分享,Spring Boot, Spring Cloud, 高并发,JVM, 数据库,Docker 容器, ELK 等相关知识,另外,关注回复「资源」,即可获取全文最热的 Java 面试&架构学习资源哟~
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 做前端也有“捷径”,科学偷懒大法了解一下!
- 程序员日常工作中如何正确的偷懒?
- 这个Python库可以偷懒,和import说再见!
- 机器人在线“偷懒”怎么办?阿里研究出了这两套算法
- 一个为了让console.log写起来更偷懒的webpack-plugin
- “偷懒”却意外探得AI视觉新象——访GAAC参赛者王铮、蒙胜宇
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
ACM国际大学生程序设计竞赛
俞勇 编 / 2012-12 / 29.00元
《ACM国际大学生程序设计竞赛:知识与入门》适用于参加ACM国际大学生程序设计竞赛的本科生和研究生,对参加青少年信息学奥林匹克竞赛的中学生也很有指导价值。同时,作为程序设计、数据结构、算法等相关课程的拓展与提升,《ACM国际大学生程序设计竞赛:知识与入门》也是难得的教学辅助读物。一起来看看 《ACM国际大学生程序设计竞赛》 这本书的介绍吧!