头歌:对数据进行过滤和分流

第1关:用 Flink 对数据进行过滤和分流

相关知识

为了完成本关任务,你需要掌握:如何用 Flink 对数据进行过滤和分流。

进行过滤和分流

Flink 操作流数据,一般都要进行过滤和分流,过滤使用 filter 算子,分流使用 keyBy 算子, filter 算子加上条件就可以进行过滤,如:filter (行为字段 == "cart"),就可以过滤出放入购物车的记录, keyBy 算子可以对数据进行分流,一般是对 id 等主键进行分流,如 keyBy(商品 Id),就是按商品 Id 进行分流,相同商品 Id 的放在一起,分流的数据会在之后按时间窗口计算时使用到。

编程要求

根据提示,在右侧编辑器补充代码,计算并输出用 Flink 对数据进行过滤和分流的结果,

要求过滤出商品浏览数据,即行为类型为 pv 的数据,并按商品id即 itemId 进行分流,

数据如下:

 
  1. 543462,1715,1464116,pv,1511658000
  2. 662867,2244074,1575622,pv,1511658000
  3. 750784,4727562,1286537,cart,1511658009
  4. 23125,4680673,1756314,buy,1511658009
  5. 44670,5140156,2131531,fav,1511658010
  6. 348706,1715,4163659,pv,1511658012
  7. 959846,2244074,479837,pv,1511658012
  8. 848070,1715,2342116,pv,1511658012

数据格式如下表:

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

以逗号进行分隔。

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/pflinkhotitems2_1/src/UserBehavior1.csv")

    //********** Begin **********

    //获得文件中的每一行记录
    val stream1 = stream
      .map(line => {
        val linearray = line.split(",")
        UserBehavior(linearray(0).toLong, linearray(1).toLong, linearray(2).toInt, linearray(3), linearray(4).toLong)
      })
      .filter(_.behavior == "pv")
      .keyBy("itemId")

    //********** End **********

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

    env.execute("对数据进行过滤和分流")


  }


}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值