基本函数
map
API
map:将函数作用在集合中的每一个元素上,并返回作用后的结果
需求:
将click.log中的每一条日志转为javaBean对象
{
"browserType": "360浏览器",
"categoryID": 2,
"channelID": 3,
"city": "昌平",
"country": "china",
"entryTime": 1577890860000,
"leaveTime": 1577898060000,
"network": "移动",
"produceID": 11,
"province": "北京",
"source": "必应跳转",
"userID": 18
}
封装JSON数据实体类ClickLog:
package xx.xxxxx.flink.transformation;
import lombok.Data;
@Data
public class ClickLog {
//频道ID
private long channelId;
//产品的类别ID
private long categoryId;
//产品ID
private long produceId;
//用户的ID
private long userId;
//国家
private String country;
//省份
private String province;
//城市
private String city;
//网络方式
private String network;
//来源方式
private String source;
//浏览器类型
private String browserType;
//进入网站时间
private Long entryTime;
//离开网站时间
private Long leaveTime;
}
代码实现:
// 1. 执行环境-env
ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
// 2. 数据源-source
DataSource<String> logDataSet = env.readTextFile("datas/click.log");
// 3. 数据转换-Transformation
// TODO: a. 使用map函数,将每条日志数据转换为实体类对象
MapOperator<String, ClickLog> clickLogDataSet = logDataSet.map(new MapFunction<String, ClickLog>() {
@Override
public ClickLog map(String log) throws Exception {
// 使用fastjson类库提供API解析
ClickLog clicklog = JSON.parseObject(log, ClickLog.class);
return clicklog;
}
});
// clickLogDataSet.printToErr();
flatMap
API
flatMap:将集合中的每个元素变成一个或多个元素,并返回扁平化之后的结果
需求:
将每一条clickLog转换为如下三个纬度
(年-月-日-时,1)
(年-月-日,1)
(年-月,1)
代码实现:
// TODO: b. 使用flatMap函数,针对日期时间entryTime,获取不同形式时间日期
/*
entryTime=1577876460000 -> Long 类型
|
年月:yyyy-MM
年月日:yyyy-MM-dd
年月日时:yyyy-MM-dd:HH
*/
FlatMapOperator<ClickLog, String> timeDataSet = clickLogDataSet.flatMap(new FlatMapFunction<ClickLog, String>() {
@Override
public void flatMap(ClickLog clicklog, Collector<String> out) throws Exception {
Long entryTime = clicklog.getEntryTime();
// 使用工具类:lang3包DateFormatUtils
String month = DateFormatUtils.format(entryTime, "yyyy-MM");
out.collect(month);
String day = DateFormatUtils.format(entryTime, "yyyy-MM-dd");
out.collect(day);
String hour = DateFormatUtils.format(entryTime, "yyyy-MM-dd:HH");
out.collect(hour);
}
});
// timeDataSet.printToErr();
filter
API
filter:按照指定的条件对集合中的元素进行过滤,过滤出返回true/符合条件的元素