从0到1Flink的成长之路(九)

这篇博客详细介绍了Apache Flink的基本函数,包括map、flatMap、filter、groupBy、sum等,并进一步探讨了JOIN操作,如内连接、左外连接、右外连接和全外连接。通过实例代码展示了如何在Flink中实现这些操作,帮助读者深入理解Flink的数据处理能力。
摘要由CSDN通过智能技术生成

基本函数

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/符合条件的元素

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值