Flink 添加自定义数据源实操

依赖

不再赘述

代码部分

//样例类
//用户行为
case class MarketingUserBehavior(userId: String, channel: String, behavior: String, timeStamp: Long)

//
object MarketAnalysis {
  def main(args: Array[String]): Unit = {
    //获取运行环境
    val env: StreamExecutionEnvironment= StreamExecutionEnvironment.getExecutionEnvironment
    //设置并行度
    env.setParallelism(1)
    //设置事件时间
    env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)

    //添加自定义数据源
    val source: DataStream[MarketingUserBehavior] =
      env.addSource(new EventSourceFunction()).assignAscendingTimestamps(_.timeStamp)

    source.print("...")

    //执行
    env.execute("app 推广")
  }


}
class EventSourceFunction() extends RichSourceFunction[MarketingUserBehavior]{
  //定义一个flag
  var running: Boolean = true
  override def cancel(): Unit = {
    running = false
  }

  override def run(ctx: SourceFunction.SourceContext[MarketingUserBehavior]): Unit = {
    val maxElements = Long.MaxValue
    var count = 0L

    while (running && count < maxElements){
      val behavior: Seq[String] = Seq("BUY", "DOWNLOAD", "SCAN", "INSTALL", "UNINSTALL" )
      val market: Seq[String] = Seq("JD_APP_STORE", "WEIBO", "MI_MALL", "BAIDU_STORE", "GOOGLE_STORE", "V_MALL" )
      val timeStamp: Long = System.currentTimeMillis()
      val userId: String = UUID.randomUUID().toString.replaceAll("_","")
      val random: Random = new Random()
      ctx.collect(MarketingUserBehavior(userId, market(random.nextInt(market.size)), behavior(random.nextInt(behavior.size)), timeStamp))

      TimeUnit.SECONDS.sleep(1)
      count += 1
    }
  }
}

初学者可能会遇见的问题

替换框选中的依赖为框框下面的依赖。
在这里插入图片描述

1. Error:(32, 20) could not find implicit value for evidence parameter of type org.apache.flink.api.common.typeinfo.TypeInformation[com.jhon.commons.MarketingUserBehavior]
      env.addSource(new EventSourceFunction()).assignAscendingTimestamps(_.timeStamp)```



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值