解决java和scala的Tuple混用问题

背景简述

平时日常数据开发主要用idea,确实挺强大。近日写了个flink任务,非广播流和广播流合并,然后过滤处理。

处理逻辑都很通用,大概是这样:BroadcastConnectedStream的process调用了WhitelistBroadcastProcess类,该类继承BroadcastProcessFunction,并实现processElement和processBroadcastElement方法,分别处理广播流和非广播流。

问题描述

上图中红色波浪线提示错误

Cannot resolve method 'process……

提示不清楚,精简后的WhitelistBroadcastProcess类如下,没用异常提示

 因为两个流以及合并处理后的流数据结构有点复杂,刚开始一起以为参数的类型有问题,可怀疑了半天也没找出问题来。

尝试一:异常

先精简WhitelistBroadcastProcess,删除所有的处理逻辑,只剩框架,还是跟上面截图一样提示错误

import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.api.java.tuple.Tuple3;

import org.apache.flink.streaming.api.functions.co.BroadcastProcessFunction;
import org.apache.flink.util.Collector;
import java.util.Map;
import java.util.Set;

public class WhitelistBroadcastProcess extends BroadcastProcessFunction<Tuple3<String, String, Map<String, String>>, Tuple2<String, Set<String>>, Tuple2<String, Map<String, String>>> {

    @Override
    public void processElement(Tuple3<String, String, Map<String, String>> value, ReadOnlyContext ctx, Collector<Tuple2<String, Map<String, String>>> out) throws Exception {

    }


    @Override
    public void processBroadcastElement(Tuple2<String, Set<String>> value, Context ctx, Collector<Tuple2<String, Map<String, String>>> out) throws Exception {

    }
}

尝试二:正常

换了另外一种方式尝试,直接在process里调用并实现 WhitelistBroadcastProcess类,如下图所示

这个时候idea安静下来了,不再提示红色波浪线。

shit!这两种方法不都一样的嘛,也没啥区别!

原因分析

稍作镇定,看尝试1和尝试2两个代码的区别,还真有点差别

尝试1定义WhitelistBroadcastProcess类的时候,idea自动填充,代码依赖了

import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.api.java.tuple.Tuple3;

尝试2在process函数中实现BroadcastProcessFunction子类的时候,idea自动填充,代码依赖了

import scala.Tuple2;
import scala.Tuple3;

两个包里的tuple还是有区别的,具体细节自行翻阅。

总结:idea很强大,用起来很爽;使用idea自动填充功能,还是要小心注意!

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值