头歌-设置时间窗口并进行计算-第1关:设置时间窗口并进行计算

目录

任务描述

相关知识

解析数据源

将数据封装到样例类并输出

编程要求

测试说明

参考答案


任务描述

本关任务:编写一个能用 Flink 获得数据并输出的小程序。

相关知识

为了完成本关任务,你需要掌握:如何用 Flink 获得数据并输出。

解析数据源

先来看看数据的内容和格式,

每一行表示一个用户行为, 这些数据保存在 UserBehavior1.csv 文件中, 如以下两条数据:

 
  1. 543462,1715,1464116,pv,1511658000
  2. 662867,2244074,1575622,pv,1511658000

解释如下: 543462(用户id),1715(商品id),1464116(商品类目id),pv(行为类型),1511658000(时间戳),

注意,这个时间戳的单位是秒。

数据格式如下表:

用户id商品id商品类目id行为类型时间戳
54346217151464116pv1511658000

按逗号进行分隔。

将数据封装到样例类并输出

代码如下:

 
  1. // 输入数据的样例类,对应数据中的用户id、类别id、行为方式,
  2. // 分别是第1、3、4列数据
  3. //样例类要定义在 object 之外
  4. case class UserBehavior1( userId: Long, categoryId: Int, behavior: String)
  5. object LiLun1 {
  6. def main(args: Array[String]): Unit = {
  7. //flink的流执行环境
  8. val env = StreamExecutionEnvironment.getExecutionEnvironment
  9. //设定Time类型为EventTime
  10. env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
  11. //并发为1
  12. env.setParallelism(1)
  13. //获得数据源的文件
  14. val stream = env.readFile[String](
  15. new TextInputFormat(null),
  16. "D:\\MyProjects\\UserBehaviorAnalysis\\HotItemsAnalysis\\src\\main\\resources\\UserBehavior1.csv")
  17. //获得文件中的相应的记录,并且封装到样例类中
  18. val stream1=stream
  19. .map(line => {
  20. val linearray = line.split(",")
  21. // 将数据保存到样例例UserBehavior1中,对应数据中的用户id、类别id、行为方式,
  22. // 分别是第1、3、4列数据,
  23. // 注意,要将数据转换成为样例类相应属性的数据类型,
  24. // 如果是String类型的不用转换,因为默认就是String类型
  25. UserBehavior1( linearray(0).toLong, linearray(2).toInt, linearray(3))
  26. })
  27. //输出数据
  28. stream1.print()
  29. env.execute("数据封装到样例类并输出")
  30. }
  31. }

输出结果: UserBehavior1(543462,1464116,pv) UserBehavior1(662867,1575622,pv)

编程要求

根据提示,在右侧编辑器补充代码,获得数据并输出, 样例类为:

 
  1. case class UserBehavior( userId: Long, itemId: Long, categoryId: Int, behavior: String, timestamp: Long )

对应如下数据内容:

 
  1. 543462,1715,1464116,pv,1511658000
  2. 662867,2244074,1575622,pv,1511658000

数据解析参考之前的“解析数据源”

测试说明

平台会对你编写的代码进行测试:

测试输入:电商数据日志文件; 预期输出: UserBehavior(543462,1715,1464116,pv,1511658000) UserBehavior(662867,2244074,1575622,pv,1511658000)

参考答案

import org.apache.flink.api.java.io.TextInputFormat
import org.apache.flink.streaming.api.TimeCharacteristic
import org.apache.flink.streaming.api.scala._

//输入数据的样例类
case class UserBehavior( userId: Long, itemId: Long, categoryId: Int, behavior: String, timestamp: Long )

object Test1 {
  def main(args: Array[String]): Unit = {


    //flink的流执行环境
    val env = StreamExecutionEnvironment.getExecutionEnvironment

    //设定Time类型为EventTime
    env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
    //并发为1
    env.setParallelism(1)

    //获得数据源的文件
    val stream = env.readFile[String](
      new TextInputFormat(null),
      "/data/workspace/myshixun/pflinkhotitems1_2/src/UserBehavior1.csv")

    //********** Begin **********
    val stream1 = stream
      .map(line => {
        val lineArray = line.split(",")
        // 将行数据转换为UserBehavior对象
        UserBehavior(lineArray(0).toLong, lineArray(1).toLong, lineArray(2).toInt, lineArray(3), lineArray(4).toLong)
      })
      
    //********** End **********

    stream1.writeAsText("/root/files/result.txt").setParallelism(1)

    env.execute("获得数据")


  }


}

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值